2015-01-08 3 views
0

Я использую Python 3.4, Tkinter и я хочу использовать progrssbar для имитации шприца, я имею в виду жидкости внутри шприца будет несомненно Progressbarpython 3.x progressbar tkinter назад?

обычно это ProgressBar в Tkinter Python 3.4 идет в горизонтальном или вертикальном положении, Я хочу, чтобы он был вертикальным, я знаю, что он начинает заполнять планку снизу вверх, что правильно, шприц становится жидким.

, но мой вопрос: как я могу положить его назад? Я имею в виду прогрессбар вместо того, чтобы заполнить шприц будет опорожнения шприца

Я использую

BarVolVal_1 = ttk.Progressbar(mGui, orient='horizontal', length=100, mode='determinate') 
BarVolVal_1.place(x=80,y=80) 
BarVolVal_1.start(50) 

помощь, которую я просто хочу, чтобы заполнить и опорожнить бар

+0

Можете ли вы предоставить полный пример? что такое mGui? некоторая фиктивная версия кода, которую мы могли бы просто скопировать и вставить для запуска, была бы полезна. – Marcin

ответ

1

Используя Progressbar.start(), вы не имеете никакого контроля по размеру шага по умолчанию он равен 1.
Поэтому вместо того, чтобы использовать Progressbar.start(), вам нужно будет создать свой собственный цикл для вызова Progressbar.step(stepsize). Таким образом, вы можете сделать шаг размером отрицательным, чтобы изменить направление шага.

В приведенном ниже примере, я сделал step функцию, которая вызывается каждые 50 мс, и, в зависимости от направления dir, устанавливает шаг 1 или -1 (значение dir). Затем через 3 секунды вызывается change_dir, который изменяет направление шага на -1, поэтому индикатор прогресса «пуст». С этого момента направление меняется каждые 2 секунды.

import tkinter as tk 
from tkinter import ttk 

def step(): 
    BarVolVal_1.step(dir) 
    mGui.after(50, step) 

def change_dir(): 
    global dir 
    dir *= -1 
    mGui.after(2000, change_dir) 

mGui = tk.Tk() 
dir = 1 

BarVolVal_1 = ttk.Progressbar(mGui, orient='horizontal', length=100, mode='determinate') 
BarVolVal_1.pack() 

step() 
mGui.after(3000, change_dir) 

mGui.mainloop() 
+0

Я пробовал свой код, но смотрю на эту ошибку Traceback (последний последний звонок): Файл «Рабочий стол \ Проект BBB \ try2.py», строка 1, в import Tkinter as tk ImportError: Нет модуля с именем 'Tkinter' –

+0

О да, я на 2,7, и я не обращал внимания на то, что вы упоминаете использование Python 3. Я обновлю операции импорта. – fhdrsdg

+0

У меня есть еще один вопрос, заполнение строки выполнения в порядке, но я хочу очистить индикатор выполнения, поэтому я сначала назначаю ему значение = 100, могу ли я его опорожнить, вызывая шаг функции, когда он имеет значение 100 и спуститься? как только dir -1? –

0

Ок, спасибо за вашу помощь, но этот код для 2.7,

код для 3.4 это один и он работает

import tkinter as tk 
from tkinter import ttk 
def step(): 
    BarVolVal_1.step(dir) 
    mGui.after(50, step) 
def change_dir(): 
    global dir 
    dir *= -1 
    mGui.after(2000, change_dir) 
mGui = tk.Tk() 
dir = 1 
BarVolVal_1 = ttk.Progressbar(mGui, orient='vertical', length=100, mode='determinate') 
BarVolVal_1.pack() 
step() 
mGui.after(3000, change_dir) 
mGui.mainloop() 
+0

Могу ли я спросить вас, почему вы просто не приняли моего ответа, а затем приняли свой собственный ответ? Ваш ответ - это только ответ, который я написал, но с инструкциями по импорту, обновленными для python 3.4, которые я позже также обновил в своем ответе.Ваш ответ не дает никакой новой или дополнительной информации, поэтому я удивлен, увидев, что вы не приняли моего ответа и приняли свое. – fhdrsdg

+0

ups, извините, моя ошибка, я исправлю это –

Смежные вопросы