Curso de TkInter - Interface Gráfica para Python 3

Indice: 
1 -- Nossa Primeira Janela.
2 -- Criando uma Label - Widget Label.
3 -- Alterando Widgets.
4 -- Posicionamentos 
5 -- Mudar fonte da Label:
6 -- Modificar Tamanho da Janela.
7 -- Adicionar Botão a tela.
7.1 -- Modificar cor de fundo e da fonte do botão.
8 -- Executar função ao clicar em botão
9 -- Entrada de informações com entry widget.
10 -- Focar o cursor em um widget ao executar o programa.
11 -- Desabilitar uma entrada de texto.
12 -- criar uma combobox
12.1 -- Recuperar valor de uma combobox
13 -- Adicionar um CheckButton a janela (Tkinter checkbox)
13.1 -- Recuperar Estado do CheckButton
14 -- RadioButton - (Botão de escolha redondo)
15 -- texto com scroll lateral - text area
15.1 -- Inserir texto na textbox
15.2 -- Limpar TextBox / Input
16 -- Criar um alerta - MessageBox
16.1 -- Outros tipos de alertas
16.2 -- messageBox com perguntas
17 - SpinBox (Selecionador de números)
17.1- Definir um valor padrão para o Spinbox
18-Barra de Progresso
18.1-Mudar cor da barra de progresso
19- Abrir Arquivos com tkinter - File Dialog
19.1- Definir tipos de arquivos para abrir
20-Adicionar uma barra superior
21-Adicionar separador por Abas
21.1 Adicionar widgets as abas
22 - Espaçamento padding
23 - Prevenir o redimensionamento da janela
24 - Adicionar borda a um frame
25 - Inserir imagens na label
.
Neste tutorial você ira aprender a como desenvolver interfaces gráficas para usuário com a linguagem python.
O pacote TKinter vem instalado junto com o python em suas versões atualizadas e não necessita ser instalado separadamente.
Se você esta utilizando a ide que vem junto da instalação padrão do python o IDLE saiba que ele foi feito utilizando TKinter! então da pra ter uma ideia de como o pacote TKinter é poderoso para criação de interfaces gráficas.
É recomendado que você já saiba o básico em linguagem python antes de prosseguir com este tutorial.

1 - Nossa Primeira Janela...

Vamos começar importando o pacote TKinter, criando uma janela e definindo o seu titulo.

Exemplo:

O resultado sera algo semelhante a isso:
Parabéns! Sua primeira janela em tkinter esta funcionando!

Na ultima linha do codigo existe o seguinte comando:

window.mainloop()

Este comando diz para a window entrar em um loop e que a janela permaneça aberta enquanto o mainloop() estiver ativo / enquanto o usuario não a fechar.
Este comando window.mainloop()deve ser o ultimo a ser executado no codigo da janela!

2 - Criando uma Label - Widget Label

Para este exemplo podemos reultilizar o codigo da janela do exemplo anterior.      basta apenas adicionar o seguinte codigo a baixo da linha  

CódigoTexto = Label(window, text="ola Mundo)

Exemplo:




###############################################################

3 - Alterando Widgets.


Cada Widget do tkinter tem um formato padrão
ao passarmos parâmetros ao instanciarmos em variáveis estamos apenas alterando esse padrão
o padrão dos Widgets esta escrito na forma de classes
por isso se quisermos alterar o padrão podemos tanto na instanciação modificá-los, por ex:

texto = Label(window, text="Ola Mundo!")

ou então alterá-lo como uma chave de array associativo 
texto["text"] = "este é o novo texto"
Exemplo no código:


##############################################################

4 - Posicionamentos:
O tkinter possui 3 diferentes gerenciadores de layout
eles servem para posicionar os widgets de nossa janela e distribui-los.
veja mais sobre eles nas seguintes postagens:
1-Gerenciador de layout place
2-Gerenciador de layout pack
##############################################################

5 - Mudar fonte da Label:
Você pode modificar a fonte da label de formas bem simples
para definir a fonte ao criar a label você pode passar o seguinte parâmetro:
font="nomeDaFonte TamanhoDaFonte EfeitoDaFonte"
ex: font="impact 20 bold"
Ex de uso:



O resultado desse código será esse:
###############################################################

6-Modificar Tamanho da Janela.

O elemento que guarda o tamanho da janela é o window.geometry
Para alterar o tamanho da janela basta passar como parametro uma string com o novo tamanho por ex:
window.geometry('800x600')
window.geometry('alturaXlargura')
ao adicionar esse codigo ao nosso codigo ele fará com que o programa fique com 800 pixels de largura e 600 de altura
podemos ainda definir a posição na qual o programa será exibido ao executar basta apenas adicionar ao parametro apos os tamanhos os valores para somar aos lados x e y das bordas do programa
por exemplo:
window.geometry('800x600+100+50')
window.geometry('alturaXlargura+MargemEsquerda+MargemTopo')
###############################################################

7-Adicionar Botão a tela.
o codigo que utilizaremos para adicionar um botão a janela é o seguinte:
botao = Button(window, text="Clique Aqui")
botao.pack()
Exemplo de uso:


E ao executar esse codigo o resultado sera o seguinte:
###############################################################

7.1-Modificar cor de fundo e da fonte do botão.
Para fazer isso basta alterar os parametros bg fg do botão
ex:
botao = Button(window, text="Clique!",bg="black",fg="white")
exemplo no codigo:



E ao executar esse código o resultado sera o seguinte:
##############################################################

8 - Executar função ao clicar em botão.
Para executar uma função ao clicar em um botão
o botão tem que receber como parametro o nome da função que ele deve executar
o nome da função deve ser atribuido ao parametro command do botão
O NOME DA FUNÇÃO DEVE SER ESCRITO SEM OS PARENTESES!!
botao = Button(window, text="Clique!",command=aoClicar)

observe o seguinte codigo:



ao clicar no botão a função aoClicar() é executada
e essa função altera o texto da label mensagem

para passar uma função como parametro ela deve ter sido criada antes do botão!
E ao clicar no botão o resultado sera o seguinte:
antes e depois de clicar
###############################################################

9 - Entrada de informações com Entry widget.
o widget entry pode receber como parametro a fonte do texto que vai ser inserido!
Exemplo de janela com entrada de texto:

Ao executarmos esse 
código 
será aberta a seguinte janela:


e caso você digite um texto e clique no botão a função aoClicar() sera executada

nesse código essa função alem de alterar o texto da label mensagem
também recupera o texto da Entry entrada e o concatena no texto que substitui o da Label mensagem
ficando com o seguinte formato:
o texto digitado  substitui o da label após clicar no botão!
###############################################################

10-Focar o cursor em um widget ao executar o programa.

Isso é bem simples basta adicionar antes da linha window.mainloop()

o comando widgetAlvoDoFoco.focus()

por exemplo:




Ao executar esse codigo o programa ja vai ser iniciado com o foco na Entry entrada

###############################################################

11-Desabilitar uma entrada de texto.
basta modificar o parametro da entrada state para desabled
ex: entrada["state"]="disabled"
ou ao criar a label: 
entrada = Entry(window, font="arial 15 bold", state="disabled")
Exemplo de uso:

e o resultado sera esse:
###############################################################

12 criar uma combobox (select)
uma combobox é uma lista de parâmetros pré-definidos no qual podemos selecionar um.
(funciona igual a um input type select do html)

Para ultilizar a combobox precisamos importar tudo do modulo tkinter.ttk
com o comando: from tkinter.ttk import *
e instanciamos com o comando: combo = Combobox(window)

Exemplo de uso:




E o resultado será esse:
###############################################################

12.1 Recuperar valor de uma combobox
para recuperar um valor selecionado em um combobox basta usar a função get()
por exemplo: selecionado = combo.get()

exemplo de uso:


Resultado:

###############################################################

13-Adicionar Checkbutton na janela(Tkinter checkbox)

Para criar um checkbutton no tkinter, você pode usar a classe Checkbutton dessa forma:
botaoMarcavel = Checkbutton(window, text='Marcar: ')
O checkbutton retorna um valor booleano, ao marcar o checkbutton o seu valor fica True, ao desmarcar seu valor muda para False.



A Variável botaoMarcavelStatus guarda o estado booleano do checkbutton
caso marcado seu valor ser True e desmarcado sera False.

Oresultado sera esse:

###############################################################


13.1-Recuperar Estado do CheckButton

Podemos recuperar o estado do estado do checkbutton ultilizando o metodo get() na variavel botaoMarcavelStatus o código sera:

estado = botaoMarcavelStatus.get()
Exemplo de uso:


o resultado sera esse:
###############################################################

14-RadioButton - Botão Selecionavel

Para criar um radio button basta instanciar a clsse Radiobutton da seguinte forma:

escolha1 = Radiobutton(window,text='PrimeiraOp', value=1)
Podemos guardar o valor do botão escolhido em uma variavel passando um parametro variable na criação do RadioButton, 
Ex:

escolha = StringVar()#essa variavel guarda o valor definido
escolha1 = Radiobutton(window,text='PrimeiraOp', value="Primeira", variable = escolha)
#a variável que guarda o valor do botão escolhido é passada também como parâmetro

Exemplo de uso:

Fazendo upload: 81312 de 81312 bytes.


E o resultado desse código sera o seguinte:
Os radiobuttons também podem ter um parâmetro command e executar uma função ao ser clicado, como por exemplo a função exibeValor()

###############################################################

15- texto com scroll lateral - text area

Para adicionar uma caixa de texto com scroll, você pode usar a classe ScrolledText dessa forma:



Exeplo de uso:



E o resultado sera esse:

###############################################################

15.1-Inserir texto na textbox / Input:


Para adicionar um texto em uma textbox podemos usar a função insert:


texto.insert(INSERT, "TEXTO DE EXEMPLO")


Exemplo de uso:





E o resultado sera esse:
###############################################################

15.2-Limpar TextBox / Input:


Para excluir todo o texto de uma textbox podemos usar a função delete(), exemplo de uso:


texto.delete(1.0, END)


Exemplo de uso:





E ao executar esse código obtemos o seguinte resultado:
###############################################################



16-Criar um alerta - MessageBox:

Para utilizar a messagebox precisaremos importar diretamente do pacote tkinter utiliza-la da seguinte forma:

from tkinter import messagebox
messagebox.showinfo('Titulo da mensagem','Conteudo da mensagem')

Exemplo de uso:


E ao executar obtemos o seguinte resultado:

###############################################################

16.1 - Outros tipos de alertas

Exemplos de mensagens:



###############################################################

16.2 - messageBox com perguntas:

Exemplos:

from tkinter import messagebox
questao = messagebox.askquestion('Titulo da Pergunta','Conteudo da pergunta')#pergunta se sim ou não
Ex:
questao = messagebox.askyesno('Titulo da Pergunta','Conteudo da pergunta')#pergunta se sim ou não
Ex:
questao = messagebox.askyesnocancel('Titulo da Pergunta','Conteudo da pergunta')#pergunta se sim ou não ou cancelar
questao = messagebox.askokcancel('Titulo da Pergunta','Conteudo da pergunta')#pergunta se sim ou cancelar
Ex:
questao = messagebox.askretrycancel('Titulo da Pergunta','Conteudo da pergunta')#pergunta se tentar ou cancelar
Ex:

###############################################################

17 - SpinBox (Selecionador de números):

Exemplo:

spin = Spinbox(window, from_=0, to=100, width=5)
Exemplo de código:

Ao executar este código obtemos esse resultado:
Podemos ainda especificar uma lista de valores para o spinbox mostrar:


spin = Spinbox(window, values=(3, 8, 11), width=5)
Nesse caso (3, 8, 11) são os únicos valores que serão mostrados no spinbox

###############################################################

17.1- Definir um valor padrão para o Spinbox:

Para definir o valor padrão do spinbox, voce deve passar uma variavel com nome
textvariable como parâmetro para o spinbox dessa forma:

var =IntVar()
var.set(36)
spin=Spinbox(window, from_=0, to=100, width=5, textvariable=var)

Agora ao executar o programa o valor mostrado como padrao no spinbox sera o 36

###############################################################

18-Barra de Progresso:

Podemos criar uma barra de progresso da seguinte forma:
from tkinter.ttk import Progressbar
barra = Progressbar(window, length=200)
E podemos definir a porcentagem da barra com o seguinte parâmetro:
barra['value'] = 70

###############################################################

18.1-Mudar cor da barra de progresso:



O resultado:

###############################################################

19- Abrir Arquivos com tkinter - File Dialog:

Exemplo : 


from tkinter import filedialog
arquivo = filedialog.askopenfilename()

Exemplo de uso 



O resultado ao clicar no botão será:

###############################################################

19.1- Definir tipos de arquivos para abrir:

Você pode especificar os tipos de arquivos que o programa deve abrir com os seguintes parâmetros:

arquivo = filedialog.askopenfilename(filetypes = (("Text files","*.txt"),("all filles","*.*")))

Podemos também abrir pastas com o seguinte comando:


pasta = filedialog.askdirectory()

e podemos definir a pasta onde queremos abrir com o comando:


from os import path
file = filedialog.askopenfilename(
initialdir=path.dirname(__file__))

###############################################################

20-Adicionar uma barra superior:

Siga este exemplo para adicionar uma barra de menu superior:


from tkinter import Menu
menu = Menu(window)
menu.add_command(label='Arquivo')
window.config(menu=menu)

e voce pode adicionar sub itens ao itens do menu com o seguinte codigo:


menu.add_cascade(label='File', menu=new_item)

Seu codigo deve ser algo parecido com isso:


e o resultado sera esse:

E podemos ainda adicionar outros itens e separadores:


O resultado sera esse:

###############################################################

21-Adicionar separador por Abas:

Para criar um controle por abas, são necessarios realizar 3 tarefas
  • 1 - Criar um controle de abas usando a classe notebook
  • 2 - criar as abas usando a classe Frame
  • 3  -Adicionar as abas ao controle de abas.
  • E por fim adicionar as abas no controle de abas para torna-las visíveis
  • Exemplo:


E o resultado sera esse:


###############################################################


21.1 Adicionar widgets as abas:

Neste Exemplo adicionei duas labels em duas abas diferentes:




O resultado ao executar será esse:


###############################################################

22 - Espaçamento padding:


Você pode adicionar um padding de forma bem simples:

lbl1 = Label(tab1, text= 'label1', padx=5, pady=5)


Basta modificar o padx e o pady do widget!

###############################################################

23 - Prevenir o redimensionamento da janela:

Basta adicionar este parâmetro a janela:

window.resizable(width=False, height=False)



podemos ainda definir o tamanho minimo e maximo da janela:

   window.minsize(width=800, height=600)
   window.maxsize(width=300, height=200)


###############################################################

24 - Adicionar borda a um frame:

Ex: 

Resultado:
###############################################################

24 - Adicionar borda a um frame:

Ex: 

Fazendo upload: 22204 de 22204 bytes.

###############################################################

25 - Estilos de Bordas 

Os estilos de bordas podem ser :
"flat""raised""sunken""ridge""solid", and "groove"

Para usalos basta modificar o parametro relief ex:
l1 = Label(root, text="This", borderwidth=2, relief="groove")
Algumas labels com estilos de bordas: