Tkinter Tutorial - Botão

  1. Botão Tkinter opção default
  2. Botão Tkinter Comando Callback

O Tkinter button widget é bastante semelhante ao Tkinter Label widget. Ele tem quase as mesmas opções que as da etiqueta, exceto que tem uma opção extra default. Vamos dar detalhes deste default depois de um exemplo básico de botão.

Você poderia gerar dois botões mais simples utilizando os códigos demo abaixo.

Tkinter Button_Basic.py
from sys import version_info
if version_info.major == 2:
    import Tkinter as tk
elif version_info.major == 3:
    import tkinter as tk
    
app = tk.Tk()
button1 = tk.Button(app, text="Python Label 1")
button2 = tk.Button(app, text="Python Label 2")
button1.pack(side=tk.LEFT)
button2.pack(side=tk.LEFT)
app.mainloop()

A janela com dois botões adjacentes um ao outro mostra depois de executar os códigos.

Tkinter Tutorial_Basic Label

Botão Tkinter opção default

A opção default no botão diz que o botão é o botão padrão na GUI, por exemplo, aquele que é invocado automaticamente quando o usuário pressiona a tecla Enter ou Return.

Botão Tkinter Comando Callback

A opção command invoca a função de retorno de chamada quando o botão é pressionado.

Tkinter Button_command callback.py
from sys import version_info
if version_info.major == 2:
    import Tkinter as tk
elif version_info.major == 3:
    import tkinter as tk
    

    
app = tk.Tk()
labelExample = tk.Button(app, text="0")

def change_label_number():
    counter = int(str(labelExample['text']))
    counter += 1
    labelExample.config(text=str(counter))
    
buttonExample = tk.Button(app, text="Increase", width=30,
                          command=change_label_number)

buttonExample.pack()
labelExample.pack()
app.mainloop()

Ele cria um botão e um widget de etiqueta na janela principal. O número no texto da etiqueta é aumentado em 1 cada vez que o botão é clicado.

Tkinter Tutorial_Button Comando Callback

def change_label_number():
    counter = int(str(labelExample['text']))
    counter += 1
    labelExample.config(text=str(counter))

O change_label_number é a função invocada quando o botão é clicado. Ele obtém o número da etiqueta e depois define a etiqueta aumentada em um.

buttonExample = tk.Button(app, text="Increase", width=30,
                          command=change_label_number)

Ele constrói a ligação entre o botão e sua função de callback.

Função de Callback com Argumentos do Botão de Comando do Tkinter

Você precisa de um objeto partial de functools se você precisar passar argumentos para as funções de retorno de chamada. Objetos partial são objetos com os argumentos posicionais args e argumentos de palavras-chave keywords.

Abaixo do código snippet demonstra como utilizar esta função parcial no comando do botão.

def change_label_number(num):
    counter = int(str(labelExample['text']))
    counter += num
    labelExample.config(text=str(counter))
    
buttonExample = tk.Button(app, text="Increase", width=30,
                          command=partial(change_label_number, 2))