Projetos Python Tkinter [Explicação passo a passo]
Publicados: 2020-09-14Aprender sobre GUI em Python pode ser bastante desafiador. Não se preocupe porque nós temos a sua volta! Neste artigo, compartilhamos um tutorial do Tkinter para que você possa trabalhar em projetos de GUI do Python com eficiência. Depois de concluir este tutorial, você estará familiarizado com os blocos de construção para criar projetos Python Tkinter. Se você deseja obter mais experiência em python, confira nossos programas de ciência de dados.
Também compartilhamos o código para cada etapa. No entanto, recomendamos que você o copie e cole somente quando entender como ele funciona. Caso contrário, não teria muita utilidade.
Índice
O que é Tkinter?
Tkinter é um pacote para Python usar o kit de ferramentas Tk GUI. Você pode usar o Tkinter para criar programas GUI por meio do Python. Embora o Tkinter seja capaz de produzir muitos programas, talvez seja necessário usar módulos para implementações avançadas. Você deve estar familiarizado com o básico do Tkinter antes de trabalhar em projetos Python Tkinter:
Um programa Hello World em Tkinter
Aqui está um exemplo de um programa hello world em Tkinter:
importar tkinter como tk
class Aplicação(tk.Frame):
def __init__(self, master=Nenhum):
super().__init__(mestre)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.hi_there = tk.Button(self)
self.hi_there[“texto”] = “Hello World\n(clique em mim)”
self.hi_there[“comando”] = self.say_hi
self.hi_there.pack(side=”top”)
self.quit = tk.Button(self, text=”QUIT”, fg=”red”,
comando=self.master.destroy)
self.quit.pack(side=”bottom”)
def diga_oi(self):
print(“Olá pessoal!”)
raiz = tk.Tk()
app = aplicativo (master = root)
app.mainloop()
Gerenciadores de geometria no Tkinter
Outro conceito principal que você deve conhecer enquanto trabalha em projetos Python Tkinter são os gerenciadores de geometria. Sem usar um gerenciador de geometria, seus widgets não apareceriam na tela. Existem basicamente três maneiras de adicionar um gerenciador de geometria:
Rede
Ele adiciona uma grade ao pai e permite que ele mostre os widgets de acordo. A grade possui linhas e colunas para medir o comprimento e a altura de seus widgets.
Pacote
Este método diz ao widget para se empacotar dentro do pai. Ele apenas adiciona o widget a uma lista de widgets filhos para o pai. Em termos simples, ele os adiciona a um bloco antes de colocá-los em um widget pai.
Lugar
Este método coloca os widgets em um local específico de acordo com o widget pai.
Em nosso tutorial abaixo, usamos o gerenciador de pacotes para manipular a posição de nossos widgets. É por isso que seria melhor se você estivesse familiarizado com esses conceitos. Isso ajudaria você a entender melhor o funcionamento do nosso projeto.
Confira: 42 ideias e tópicos interessantes de projetos Python para iniciantes
Construindo uma GUI em Python (Tkinter Tutorial)
Etapa 1: Importando o módulo
Para começar a trabalhar na aplicação, primeiro temos que importar o módulo necessário. Você pode fazer isso importando o módulo em seu namespace. Isso permitiria que você usasse as constantes e classes por seus nomes em vez de qualificá-las. Isso significa que você pode usar “Label” usando seu nome em vez de qualificá-lo como “TkinterLabel”. Isso tornaria as coisas relativamente fáceis e você pode economizar muito tempo, pois qualificar todas as classes e constantes pode ser muito complicado. Use o seguinte código para importar o módulo:
>>> da importação do Tkinter *
Se o Python não estiver vinculado ao Tk (ou Tcl) em seu sistema ou se você não tiver o Tk (ou Tcl) instalado em seu sistema, você verá uma mensagem de erro nesta seção. Para corrigir esse problema, você precisa do administrador do seu sistema para acesso. Certifique-se de resolver este problema fazendo o mesmo.
Por outro lado, se você não vir nenhuma mensagem de erro nestas seções, você pode passar para a próxima etapa para criar uma janela:
>>> vitória = Tk()
Atribuímos à nossa janela a variável “win”. Depois de implementar o código acima, você verá uma pequena janela na tela. Sua barra de título deve mostrar “tk” escrito nele.
Isso significa que você concluiu esta etapa com sucesso e agora pode começar a construir a GUI em Python.
Etapa 2: Adicionando botões
Agora que temos nosso Tkinter rodando, podemos adicionar botões ao nosso programa. Os botões são a seção mais simples de qualquer programa GUI, então vamos começar com eles:
>>> b1 = Button(win, text=”One”)
>>> b2 = Button(win, text=”Dois”)
A janela que criamos na última seção é o pai dos botões que criamos agora. À medida que você trabalhar em mais projetos Python Tkinter, descobrirá que os quadros também podem atuar como pais para outras classes. Agora, ao implementar este código, você notará uma ocorrência estranha – Os botões não aparecem na janela!
Isso porque precisamos adicionar uma grade e um pacote ao nosso programa. Eles são chamados de gerenciadores de geometria e já os discutimos anteriormente neste artigo. Adicionaremos o gerenciador de pacotes em nossa próxima seção:
Etapa 3: Implementando o Gerenciador de Pacotes
Usaremos o método pack para adicionar nossos botões ao widget pai. Com o gerenciador de pacotes, você pode dizer em qual lado do widget pai você deseja que seu widget filho seja compactado. Você pode usar TOP, RIGHT, BOTTOM, LEFT como suas funções. O programa seleciona TOP como padrão se você não especificar um lado. Vamos adicionar o gerenciador de pacotes primeiro:
>>> b1.pack()
>>> b2.pack()
Ao adicionar o primeiro botão (primeira linha do código), você notará que sua janela diminui para o tamanho do botão. Da mesma forma, quando você adiciona o segundo botão (segunda linha do código), a janela se expande de acordo com o tamanho desse botão. A janela colocou os botões em ordem vertical porque não especificamos de que lado eles devem ser compactados. Vamos empacotá-los à esquerda usando o código abaixo:
>>> b2.pack(side=LEFT)
>>> b1.pack(side=LEFT)
Observe que usamos o gerenciador de pacotes principalmente quando temos que colocar nossos widgets apenas nessas duas ordens (horizontal e vertical). Para outros tipos de posicionamentos de widgets, usamos o método grid ou o método place. Você pode adicionar algum espaço entre os botões e a janela usando as funções 'padx' ou 'pady'. A função 'padx' adiciona preenchimento ao eixo X (esquerdo e direito) do widget, e a função 'pady' adiciona preenchimento ao eixo Y (superior e inferior) do dispositivo.
>>> b1.pack(side=LEFT, padx=10)
>>> b2.pack(side=LEFT, padx=10)
Recomendamos experimentar o preenchimento dos widgets. Isso o ajudaria a entender as diferentes maneiras de modificar o posicionamento dos widgets. O preenchimento é um conceito desafiador para dominar, então seria melhor experimentá-lo antes de passar para a próxima seção.
Etapa 4: O Gerenciador de Grade
Outro gerenciador de geometria popular no Tkinter é o gerenciador de grade. Como discutimos anteriormente em nosso artigo, o gerenciador de grade permite dividir o pai em linhas e colunas. Você pode colocar os widgets filho nas células da grade do pai. Você pode modificar a largura e o comprimento de cada coluna e linha de acordo com suas necessidades. Nem todas as colunas precisam ter a mesma largura. Da mesma forma, cada linha não precisa ter a mesma altura. Assim, o gerenciador de grade oferece mais liberdade criativa em termos de edição de aparência e posicionamento de seus widgets.
Vamos criar uma nova janela com os mesmos botões que criamos antes para testar o gerenciador de grade. No entanto, adicionaremos os botões em uma grade 2×2:
>>> vitória = Tk()
>>> b1 = Button(win, text=”One”)
>>> b2 = Button(win,text=”Dois”)
>>> b1.grid(linha=0, coluna=0)
>>> b2.grid(linha=1, coluna=1)
Você notaria que nosso programa deixou algumas células vazias. Isso porque não adicionamos nada à linha 0, coluna 1 (ou linha 1 e coluna 0). Vamos tentar um novo widget para ver algo interessante:
>>> l = Label(win, text=”Isto é um rótulo”)
>>> l.grid(linha=1, coluna=0)
Depois de adicionar o código acima, você percebe que o segundo botão se desloca para a direita para acomodar o texto. Seria melhor experimentar o gerenciador de grade com vários widgets para ver como ele funciona.
Deve ler: Salário do desenvolvedor Django na Índia
Passo #5: Melhorando o Layout
Nesta seção, tentaremos um novo widget chamado frame. Um quadro serve apenas para conter outros widgets. Você pode empacotar vários widgets em um quadro ou usar uma grade para colocá-los no mesmo. Você também pode empacotar diferentes quadros em um único quadro. Esse recurso permite que você crie layouts avançados para seu programa GUI. Por exemplo, adicionaremos três botões a um quadro em uma linha. Adicione os botões horizontalmente e, em seguida, empacote o rótulo verticalmente com o quadro:

>>> vitória = Tk()
>>> f = Quadro(ganhar)
>>> b1 = Botão(f, “Um”)
>>> b2 = Botão(f, “Dois”)
>>> b3 = Botão(f, “Três”)
>>> b1.pack(side=LEFT)
>>> b2.pack(side=LEFT)
>>> b3.pack(side=LEFT)
>>> l = Label(win,"Este rótulo está sobre todos os botões")
>>> l.pack()
>>> f.pack()
Como discutimos anteriormente neste artigo, você também pode usar o método place como gerenciador de geometria. O método place permite colocar widgets em um local específico dentro de uma janela ou quadro. No entanto, não recomendamos usar o método place com frequência porque restringe a capacidade de resposta do programa.
Com a função de grade, você pode usar o parâmetro 'sticky' que permite usar as coordenadas do mapa (S, N, W, SW, NE, etc.) para especificar os posicionamentos dos widgets. Antes de passarmos para a próxima seção, certifique-se de entender as funções que discutimos ainda. Teste a grade e as funções do quadro juntos para ver como você pode usá-lo em outros projetos de GUI do Python.
Passo #6: Tornando os botões úteis
Se você clicar nos botões que criamos até agora, você deve ter notado que eles não respondem (eles não fazem nada). Eles deprimem quando você clica e realçam quando você passa o mouse sobre eles, mas não executam nenhuma função. Para que nossos botões executem funções específicas, teremos que usar a função 'configure'.
Podemos passar qualquer argumento de palavra-chave para o método 'configure' de um widget para passá-lo ao criá-lo. Aqui está um exemplo:
>>> b1.configure(text=”Uno”)
O parâmetro 'command' vincula os botões a funções de retorno de chamada quando você os cria ou adiciona 'configure' a eles. Para entender como funciona, vamos criar uma função que imprime uma mensagem:
>>> def but1():
… print(“O botão um foi pressionado”)
…
>>> b1.configure(comando=but1)
Então, quando você clicasse no respectivo botão, ele imprimiria uma mensagem.
Etapa 7: Adicionando widgets de entrada
Widgets de entrada permitem que os usuários insiram texto no programa. No entanto, teríamos que tornar o widget de entrada funcional como fizemos com os botões. Um widget de entrada precisa recuperar (e definir) o texto. Para que o widget de entrada execute esta função, você teria que usar o objeto Tkinter 'StringVar.' O objeto 'StringVar' mantém o texto na forma de uma string e o torna legível por meio de get.
Criaremos uma nova janela para testar nossos widgets de entrada:
>>> vitória = Tk()
>>> v = StringVar()
>>> e = Entry(win,textvariable=v)
>>> e.pack()
Vamos agora adicionar “este é um teste” como a entrada e recuperar o mesmo através de StringVar:
>>> v.get()
"isto é um teste"
Agora você pode definir o texto em StringVar e fazê-lo aparecer no widget:
>>> v.set(“isso é definido a partir do programa”)
Widget Adicional: O Widget Listbox
Além do widget de entrada, podemos adicionar um widget de caixa de listagem. Um widget de caixa de listagem permite que o usuário escolha um item de um menu. Criaremos uma nova janela para experimentar o widget de caixa de listagem:
>>> vitória = Tk()
>>> lb = Listbox(win, height=3)
>>> lb.pack()
>>> lb.insert(END, “primeira entrada”)
>>> lb.insert(END, “segunda entrada”)
>>> lb.insert(END, “terceira entrada”)
>>> lb.insert(END, “quarta entrada”)
Você pode inserir itens no início, no meio e no final da lista. Você pode excluí-los também. Se houver muitos itens na lista, você pode adicionar uma barra de rolagem:
>>> sb = Barra de rolagem(win, oriente=VERTICAL)
>>> sb.pack(side=LEFT, fill=Y)
Para tornar nossa barra de rolagem funcional, teremos que usar funções de retorno de chamada:
>>> sb.configure(command=lb.yview)
>>> lb.configure(yscrollcommand=sb.set)
O método curselection retorna um item para você quando você o seleciona na caixa de listagem. Ele retornará uma tupla vazia se você não escolher nenhum item.
Etapa 8: Etapas finais
Usaremos todas as coisas que aprendemos em nosso tutorial do Tkinter para criar um editor de lista telefônica:
Código total
#!/usr/bin/env python3
da importação do tkinter *
da importação de telefones *
def qual_selecionado():
print("Em {0}".format(select.curselection()))
return int(select.curselection()[0])
def add_entry():
phonelist.append([fnamevar.get(), lnamevar.get(), phonevar.get()])
set_select()
def update_entry():
lista de telefones[which_selected()] = [fnamevar.get(),
lnamevar.get(),
phonevar.get()]
def delete_entry():
del phonelist[which_selected()]
set_select()
def load_entry():
fname, lname, phone = phonelist[which_selected()]
fnamevar.set(fname)
lnamevar.set(lname)
phonevar.set(telefone)
def make_window():
global fnamevar, lnamevar, phonevar, selecione
vitória = Tk()
frame1 = Frame(ganhar)
frame1.pack()
Label(frame1, text=”Nome”).grid(row=0, column=0, sticky=W)
fnamevar = StringVar()
fname = Entry(frame1, textvariable=fnamevar)
fname.grid(linha=0, coluna=1, fixo=W)
Label(frame1, text=”Sobrenome”).grid(linha=1, coluna=0, sticky=W)
lnamevar = StringVar()
lname = Entry(frame1, textvariable=lnamevar)
lname.grid(linha=1, coluna=1, fixo=W)
Label(frame1, text=”Phone”).grid(row=2, column=0, sticky=W)
phonevar = StringVar()
telefone = Entry(frame1, textvariable=phonevar)
phone.grid(linha=2, coluna=1, fixo=W)
frame2 = Frame(win) # Linha de botões
frame2.pack()
b1 = Button(frame2, text="Adicionar", command=add_entry)
b2 = Button(frame2, text=”Atualizar”, command=update_entry)
b3 = Button(frame2, text=”Delete”, command=delete_entry)
b4 = Button(frame2, text=”Load”, comando=load_entry)
b5 = Button(frame2, text=”Atualizar”, command=set_select)
b1.pack(lado=ESQUERDO)
b2.pack(lado=ESQUERDO)
b3.pack(lado=ESQUERDO)
b4.pack(lado=ESQUERDO)
b5.pack(lado=ESQUERDO)
frame3 = Frame(win) # seleção de nomes
frame3.pack()
scroll = barra de rolagem (frame3, orient = VERTICAL)
select = Listbox(frame3, yscrollcommand=scroll.set, height=6)
scroll.config(command=select.yview)
scroll.pack(side=RIGHT, fill=Y)
select.pack(side=LEFT, fill=BOTH, expand=1)
vitória de retorno
def set_select():
phonelist.sort(key=lambda record: record[1])
select.delete(0, END)
para fname, lname, phone na lista telefônica:
select.insert(END, “{0}, {1}”.format(lname, fname))
vitória = make_window()
set_select()
win.mainloop()
Segue a lista de telefones:
lista de telefones = [['Chris', 'Meyers', '241-343-4349'],
['Robert', 'Smith', '202-689-1234'],
['Janet', 'Jones', '609-483-5432'],
['Ralph', 'Barnhart', '215-683-2341'],
['Eric', 'Nelson', '571-485-2689'],
['Ford', 'Prefeito', '703-987-6543'],
['Maria', 'Zigler', '812-567-8901'],
['Bob', 'Smith', '856-689-1234']]
O programa que compartilhamos aqui é um exemplo. Você pode criar seu programa com as funções que discutimos neste tutorial do Tkinter. O programa acima carece de várias funcionalidades, como não ter a opção de salvar as alterações. Você pode adicionar a função salvar sozinho criando um botão que pode executar essa tarefa.
Deve ler: Markov Chain no Tutorial Python
Saiba mais sobre projetos de GUI Python e Python
Trabalhar em projetos Python Tkinter pode ser muito divertido se você souber o que está fazendo. Eles também são uma ótima maneira de entender seus pontos fortes (e fracos). Você pode aprender mais sobre Python; recomendamos ir ao nosso blog. Aqui estão alguns recursos para leitura adicional:
- 10 Projetos de GUI Python
- Como fazer um chatbot em Python
- 42 ideias de projetos Python
Quais são seus pensamentos sobre este projeto? Você já trabalhou em outros projetos Python Tkinter? Nos informe.
Se você está curioso para aprender sobre ciência de dados, confira o Programa PG Executivo em Ciência de Dados do IIIT-B & upGrad, que é criado para profissionais que trabalham e oferece mais de 10 estudos de caso e projetos, workshops práticos práticos, orientação com especialistas do setor, 1 -on-1 com mentores do setor, mais de 400 horas de aprendizado e assistência de trabalho com as principais empresas.
O Python é adequado para criar interfaces gráficas de usuário?
O Python possui várias estruturas de interface gráfica do usuário, desde o Tkinter até várias outras soluções de plataforma cruzada, bem como ligações específicas da plataforma. A criação de interfaces gráficas de usuário é rápida e fácil quando o Python é combinado com o Tkinter. O Python é ideal para a criação de GUI porque possui muitos widgets integrados, gera janelas rapidamente, possui fortes técnicas de manipulação de eventos e recursos de desenho rudimentares.
Tkinter ou KIVY: qual é melhor usar?
Kivy é uma estrutura Python gratuita e de código aberto para criar ou projetar programas de interface de usuário exclusivos, mas atraentes. Se você é um desenvolvedor python que gosta de criar aplicativos, o KIVY é uma excelente opção para criar aplicativos mais dinâmicos. Tkinter é a interface Python mais usada para desenvolver aplicativos GUI de forma rápida e fácil. Se você é novo no Python e quer aprender a criar interfaces de computador, comece com o Tkinter e aprenda os fundamentos.