Barra de progresso do Tkinter

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.Progressbarclasse:

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 orientser 'horizontal'ou 'vertical'.
  • Representa lengtha largura de uma barra de progresso horizontal ou a altura de uma barra de progresso vertical.
  • Pode modeser 'determinate'ou 'indeterminate'.

O modo indeterminado

No indeterminatemodo, a barra de progresso mostra um indicador que oscila entre as extremidades do widget.

Normalmente, você usa o indeterminatemodo 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 determinatemodo, a barra de progresso mostra um indicador do início ao fim do widget.

Se você souber medir o progresso relativo, poderá usar o determinatemodo.

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 cada intervalmilissegundo. O intervalpadrão é 50ms.
  • step([delta])– aumentar o valor do indicador em delta. O deltapadrã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 indeterminateexemplo do modo

O programa a seguir ilustra como criar uma barra de progresso no indeterminatemodo. Se você clicar no startbotão, a barra de progresso começará a mover o indicador. Quando você clica no stopbotã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:

Barra de progresso do Tkinter

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.startmétodo para o comando do startbotão:

start_button = ttk.Button(
    root,
    text='Start',
    command=pb.start
)Linguagem de código:  Python  ( python )

Terceiro, passe o Progressbar.stopmétodo para o comando do stopbotão:

stop_button = ttk.Button(
    root,
    text='Stop',
    command=pb.stop
)Linguagem de código:  Python  ( python )

2) Tkinter Progressbar no determinateexemplo do modo

O programa a seguir mostra como usar uma barra de progresso no determinatemodo:

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 determinatemodo:

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 progressbotã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'] &lt; 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 stopbotã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 indeterminatemodo quando o programa não puder saber com precisão o progresso relativo a ser exibido.
  • Use o determinatemodo se você souber medir o progresso com precisão.
  • Use os métodos start(), step()e stop()para controlar o valor atual da barra de progresso.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *