Resumo : neste tutorial, você aprenderá sobre o widget Tkinter Progressbar.
Introdução ao widget Tkinter Progressbar
Um widget Progressbar permite fornecer feedback ao usuário sobre o andamento de uma tarefa de longa duração. Para criar um widget Progressbar, você usa a ttk.Progressbar
classe:
ttk.Progressbar(container, **options)
Linguagem de código: Python ( python )
A seguir são mostrados os parâmetros típicos para criar um widget Progressbar:
ttk.Progressbar(container, orient, length, mode)
Linguagem de código: Python ( python )
Nesta sintaxe:
- O
container
é o componente pai da barra de progresso. - Pode
orient
ser'horizontal'
ou'vertical'
. - Representa
length
a largura de uma barra de progresso horizontal ou a altura de uma barra de progresso vertical. - Pode
mode
ser'determinate'
ou'indeterminate'
.
O modo indeterminado
No indeterminate
modo, a barra de progresso mostra um indicador que oscila entre as extremidades do widget.
Normalmente, você usa o indeterminate
modo quando não sabe como medir com precisão o tempo que uma tarefa de longa duração leva para ser concluída.
O modo determinado
No determinate
modo, a barra de progresso mostra um indicador do início ao fim do widget.
Se você souber medir o progresso relativo, poderá usar o determinate
modo.
Os métodos importantes de uma barra de progresso
A Progressbar possui os seguintes métodos importantes:
start([interval])
– comece a mover o indicador a cadainterval
milissegundo. Ointerval
padrão é 50ms.step([delta])
– aumentar o valor do indicador em delta. Odelta
padrão é 1 milissegundo.stop()
– pare de mover o indicador da barra de progresso.
Exemplos de barra de progresso Tkinter
Vejamos alguns exemplos de criação de widgets de barra de progresso.
1) Tkinter Progressbar no indeterminate
exemplo do modo
O programa a seguir ilustra como criar uma barra de progresso no indeterminate
modo. Se você clicar no start
botão, a barra de progresso começará a mover o indicador. Quando você clica no stop
botão, a barra de progresso para de mover o indicador de progresso:
import tkinter as tk
from tkinter import ttk
# root window
root = tk.Tk()
root.geometry('300x120')
root.title('Progressbar Demo')
root.grid()
# progressbar
pb = ttk.Progressbar(
root,
orient='horizontal',
mode='indeterminate',
length=280
)
# place the progressbar
pb.grid(column=0, row=0, columnspan=2, padx=10, pady=20)
# start button
start_button = ttk.Button(
root,
text='Start',
command=pb.start
)
start_button.grid(column=0, row=1, padx=10, pady=10, sticky=tk.E)
# stop button
stop_button = ttk.Button(
root,
text='Stop',
command=pb.stop
)
stop_button.grid(column=1, row=1, padx=10, pady=10, sticky=tk.W)
root.mainloop()
Linguagem de código: Python ( python )
Saída:
Como funciona.
Primeiro, crie uma barra de progresso horizontal cujo comprimento seja 280 pixels e o modo seja 'indeterminate'
:
pb = ttk.Progressbar(
root,
orient='horizontal',
mode='indeterminate',
length=280
)
Linguagem de código: Python ( python )
Segundo, passe o Progressbar.start
método para o comando do start
botão:
start_button = ttk.Button(
root,
text='Start',
command=pb.start
)
Linguagem de código: Python ( python )
Terceiro, passe o Progressbar.stop
método para o comando do stop
botão:
stop_button = ttk.Button(
root,
text='Stop',
command=pb.stop
)
Linguagem de código: Python ( python )
2) Tkinter Progressbar no determinate
exemplo do modo
O programa a seguir mostra como usar uma barra de progresso no determinate
modo:
from tkinter import ttk
import tkinter as tk
from tkinter.messagebox import showinfo
# root window
root = tk.Tk()
root.geometry('300x120')
root.title('Progressbar Demo')
def update_progress_label():
return f"Current Progress: {pb['value']}%"
def progress():
if pb['value'] < 100:
pb['value'] += 20
value_label['text'] = update_progress_label()
else:
showinfo(message='The progress completed!')
def stop():
pb.stop()
value_label['text'] = update_progress_label()
# progressbar
pb = ttk.Progressbar(
root,
orient='horizontal',
mode='determinate',
length=280
)
# place the progressbar
pb.grid(column=0, row=0, columnspan=2, padx=10, pady=20)
# label
value_label = ttk.Label(root, text=update_progress_label())
value_label.grid(column=0, row=1, columnspan=2)
# start button
start_button = ttk.Button(
root,
text='Progress',
command=progress
)
start_button.grid(column=0, row=2, padx=10, pady=10, sticky=tk.E)
stop_button = ttk.Button(
root,
text='Stop',
command=stop
)
stop_button.grid(column=1, row=2, padx=10, pady=10, sticky=tk.W)
root.mainloop()
Linguagem de código: Python ( python )
Saída:
Como funciona.
Primeiro, crie uma barra de progresso no determinate
modo:
pb = ttk.Progressbar(
root,
orient='horizontal',
mode='determinate',
length=280
)
Linguagem de código: Python ( python )
Segundo, vincule a progress()
função ao evento click do progress
botão. Depois que o botão é clicado, o valor da barra de progresso aumenta em 20% e o rótulo de progresso é atualizado. Além disso, o programa mostra uma caixa de mensagem indicando que o progresso será concluído se o valor atingir 100:
def progress():
if pb['value'] < 100:
pb['value'] += 20
value_label['text'] = update_progress_label()
else:
showinfo(message='The progress completed!')
Linguagem de código: Python ( python )
Terceiro, vincule a stop()
função ao evento click do stop
botão. Além disso, a função stop() atualizará o rótulo de progresso.
def stop():
pb.stop()
value_label['text'] = update_progress_label()
Linguagem de código: Python ( python )
Resumo
- Use o
ttk.Progressbar(container, orient, length, mode)
para criar uma barra de progresso. - Use o
indeterminate
modo quando o programa não puder saber com precisão o progresso relativo a ser exibido. - Use o
determinate
modo se você souber medir o progresso com precisão. - Use os métodos
start()
,step()
estop()
para controlar o valor atual da barra de progresso.