Comece a criar aplicativos de área de trabalho em Python com a biblioteca de GUI Tkinter
Tkinter é um kit de ferramentas de interface gráfica do usuário (GUI) que você deve experimentar se quiser explorar o poder do Python na criação de aplicativos de desktop.
Aqui, damos uma olhada nos fundamentos do módulo Tkinter GUI.
Configuração do Tkinter
Normalmente, você não precisa instalar o tkinter separadamente se tiver instalado uma versão posterior do Python, começando com o Python 3. A biblioteca pode não funcionar com versões antigas do Python. Este é um problema comum para usuários de Mac e Linux, já que esses sistemas operacionais geralmente vêm com versões mais antigas do Python por padrão.
Geralmente, para usar o módulo tkinter , certifique-se de baixar e instalar a versão compatível mais recente do Python em seu PC a partir do site oficial python.org .
Se você estiver no Mac, como alternativa, você pode baixar a versão mais recente do ActiveTcl, um compilador tkinter da ActiveState .
Como usar o Tkinter
Tkinter depende de sua classe TK embutida. E ele encerra todos os eventos dentro da GUI em um mainloop . Portanto, o wrapper mainloop torna seu código tkinter executável.
Para começar com o tkinter :
from tkinter import Tk
Tk().mainloop()
Executar o código acima gera um quadro tkinter vazio.
Os recursos de personalização do Tkinter, no entanto, estão em seus widgets embutidos.
Para usar esses widgets, você pode importá-los do tkinter substituindo from tkinter import Tk por:
from tkinter import *
t = Tk()
t.mainloop()
Você também pode ajustar o tamanho da janela com a função de geometria e, em seguida, especificar um título usando o widget de título do tkinter :
t = Tk()
t.geometry("600x600")
t.title("Tk Tutorial")
t.mainloop()
Widget de etiqueta Tkinter
O Tkinter permite que você escreva textos simples diretamente na GUI usando o widget Label :
t = Tk()
Label(t, text = "MUO Tkinter tutorial").grid()
t.mainloop()
O método grid () , entretanto, é uma alternativa ao método pack () . Ele fixa seus widgets à GUI, tornando-os visíveis.
Você também pode especificar uma fonte para o texto do rótulo :
t = Tk()
Label(t, text = "MUO Tkinter tutorial", font=(60)).grid()
t.mainloop()
Trabalhando com os widgets de botão no Tkinter
Os botões são alguns dos widgets mais usados no tkinter . E você pode adicionar esses botões clicáveis à sua GUI usando os vários widgets de botão integrados.
Veja como adicionar um botão principal à sua GUI usando o widget de botão :
t = Tk()
Button(t, text = "Clickable", bg = "black", fg = "white").grid()
t.mainloop()
As palavras-chave bg e fg descrevem a cor de fundo do botão e a cor do texto dentro dele, respectivamente.
Você também pode ajustar a dimensão do botão incluindo os parâmetros de altura e largura :
t = Tk()
Button(t, text = "Clickable", bg = "black", fg = "white", height="2", width="10").grid()
t.mainloop()
Aqui está a saída para isso:
E se quiser tornar o botão mais atraente visualmente, você pode incluir uma palavra-chave de relevo e, em seguida, ajustar a largura da borda:
t = Tk()
Button(t, text="Clickable", bg="blue", fg="white",
height=2, width=10, relief=RAISED, borderwidth=6).grid()
t.mainloop()
E isso se parece com isto:
Substitua RAISED por FLAT para ver como isso funciona.
Você pode adicionar quantos botões desejar. Mas tome cuidado para evitar a sobreposição de conteúdo.
Para evitar a sobreposição, você pode especificar a posição da linha e da coluna para cada botão:
t = Tk()
Button(t, text=1, bg="black", fg="white").grid(row=1, column=1)
Button(t, text=2, bg="black", fg="white").grid(row=2, column=1)
Button(t, text=3, bg="black", fg="white").grid(row=3, column=1)
Button(t, text=4, bg="black", fg="white").grid(row=4, column=1)
t.mainloop()
Uma palavra-chave de comando opcional, no entanto, adiciona eventos ao widget de Botão . Em essência, ele ancora uma função opcional que trata de certos eventos quando você clica em um botão.
O código abaixo, por exemplo, multiplica o valor de cada botão por 6 quando você clica nele. E é baseado em uma função predefinida:
def buttonpress(r):
r = 6*r
Label(t, text=r, font=(60)).grid(row=5, column=2)
t = Tk()
Button(t, text = 1, bg = "black", fg = "white", width = 10, height = 2,
command = lambda:buttonpress(1)).grid(row=1, column = 1, pady = 6)
Button(t, text = 2, bg = "black", fg = "white", width = 10,
command = lambda:buttonpress(2)).grid(row = 2, column = 1, pady = 6)
Button(t, text = 3, bg = "black", fg = "white", width = 10,
command = lambda:buttonpress(3)).grid(row = 3, column = 1, pady = 6)
Button(t, text = 4, bg = "black", fg = "white", width = 10,
command = lambda:buttonpress(4)).grid(row = 4, column = 1, pady = 6)
t.mainloop()
No código acima, o botão pressionado lida com o evento de multiplicação. O widget Button então aponta para esse manipulador de eventos usando uma função lambda anônima.
E se você estiver preocupado com a palavra-chave pady , ela separa distintamente cada botão na linha. Substituí-lo por padx separa os botões da coluna. E você pode usar as duas palavras-chave simultaneamente para separar os botões em ambos os eixos conforme desejar.
Dito isso, você não quer reinventar a roda para cada botão, como fez no código anterior. Isso diminui o tempo de execução, além de tornar seu código difícil de ler e restringir.
Mas você pode usar um loop for para evitar essa repetição.
Portanto, aqui está uma versão mais curta e melhor do código acima:
def buttonpress(r):
r = 6*r
Label(t, text = r, font = (60)).grid(row = 5, column = 2)
t = Tk()
a = [1, 4, 6, 7]
for i in a:
j = lambda y = i:buttonpress(y)
Button(t, text = i, bg = "black", fg = "white", width = 10, height = 2,
command=j).grid(row = i, column = 1, pady = 6)
t.mainloop()
Botões de menu e botões de verificação
Vamos explorar ainda mais o poder do loop for para adicionar botões de menu à sua GUI:
from tkinter import *
t = Tk()
buttons = ["Files", "Dashboard", "Menu", "Settings", "Help"]
m = 0
for i in range(len(buttons)):
# Get each text in the buttons array using a list index as m increases.
# Then let the column increase by 1 through the length of the array:
Menubutton(t, text=buttons[m], bg="blue", fg="white").grid(row=5, column=i)
m += 1
t.mainloop()
Adicionar botões de verificação à sua GUI também é muito fácil:
t = Tk()
Checkbutton(t, text = "Select option").grid()
t.mainloop()
Sinta-se à vontade para multiplicar esse botão de verificação usando o loop for , como fizemos anteriormente.
Como criar um menu suspenso com o widget de menu do Tkinter
O widget Menu permite criar menus suspensos clicáveis no tkinter .
Conforme declarado anteriormente, o tkinter oferece muitas opções de widget. E você usará alguns deles ao projetar seu menu suspenso.
Aqui estão algumas das opções de widgets comuns que você encontrará ao fazer um menu suspenso:
- add_cascade: exibe um rótulo de menu e o cola onde pertence.
- add_separator: Demarca submenus e os agrupa em submenus superiores e inferiores.
- add_command: Aqui é onde você dá um nome ao seu submenu. Em última análise, ele aceita um argumento de comando onde você pode especificar um manipulador de eventos.
Aqui está um exemplo suspenso que usa essas três opções:
from tkinter import *
t = Tk()
fileOptions = ["New", "open", "Save", "Save as"]
fileOptionsAfterseparator = ["Import", "Export", "Exit"]
viewOptions = ["Transform", "Edit", "Create"]
menuBar = Menu(t)
file = Menu(menuBar, tearoff=0)
for i in fileOptions:
file.add_command(label=i, command=None)
file.add_separator()
for i in fileOptionsAfterseparator:
file.add_command(label=i, command=None)
menuBar.add_cascade(label="File", menu=file)
View = Menu(menuBar, tearoff=0)
for i in viewOptions:
View.add_command(label=i, command=None)
menuBar.add_cascade(label="View", menu=View)
t.config(menu=menuBar)
t.mainloop()
Veja como fica:
Menu de opções do Tkinter
Um menu de opções , ao contrário do menu suspenso, muda seu rótulo para uma opção selecionada.
Embora você possa especificar um valor de rótulo padrão para um menu de opções, ele não tem rótulo por padrão.
Veja como criar um menu de opções no tkinter :
t = Tk()
Omenu = StringVar() #set the variable type of the options
Omenu.set("MUO") #specify a default value for the menu icon
OptionMenu(t, Omenu, "MUO", "Amazon", "Tutorial").grid()
t.mainloop()
Crie um aplicativo de área de trabalho reutilizável com o Tkinter
O Tkinter oferece uma variedade de recursos que ajudam a criar aplicativos de desktop GUI interativos. Embora possa não ter muitos recursos de embelezamento flexíveis como alguns outros módulos Python GUI, ainda é uma ferramenta útil que vale a pena explorar. E embora os exemplos aqui mostrem apenas alguns dos conceitos básicos, o tkinter oferece recursos mais avançados que você pode experimentar.
Dito isso, você pode construir uma calculadora de desktop GUI, fazer um mini editor de texto ou até mesmo criar um aplicativo de desktop GUI para gerenciar seus inventários. Se você deseja abrir suas asas e se tornar um especialista em GUI de desktop, você pode até mesmo verificar outros módulos de GUI do Python.