Executando verificação de segurança...
2

📚️ [TUTORIAL] Interface gráfica moderna para python com Tkinter

Introdução

Quando estudamos programação como iniciantes e não só tem sido difícil encontrar uma biblioteca/framework de Interface Gráfica de Utilizador (GUI) para prosseguirmos com nossos estudos. Para o caso dos utilizadores do Python ela já vem instalado com uma biblioteca para GUI o Tkinter (para windows e Mac OS, no caso do Linux é bem fácil é apenas um linha no terminal para instalar), o qual tem vários pontos fortes:

Multiplataforma, então o mesmo código funciona no Windows, macOS e Linux; elementos visuais são renderizados usando elementos nativos do sistema operacional, para que os aplicativos construídos pareçam pertencer à plataforma em que são executados.
fonte: Programadores Brasil

Para saber

Apesar de a própria documentação dizer que:

O Tkinter é famoso por ter uma aparência desatualizada.

É possível criar GUI bem modernas, cumprindo-se assim o ditado que diz que o problema nunca é a ferramente e sim quem a usa. Venho já há um tempo utilizando o Tkinter consegui chegar a uma qualidade de GUI que me alegrado por isso tenho muito gosto em partilhar e afirmo que não vejo melhor que está, para começar.

O uso do Tkinter fica bem interessante com o uso o ttk ou tkinter.ttk, com ele é possível separar os texto dos estílos e até estilizar várias partes da GUI com a mesma linha mais ou menos como CSS e HTML. O ttk evoluio tanto que existe o ttkbootstrap, e muitas outras com design fantástico.

Exemplos

Cara está tão interessante, a sintaxe é simples, as GUI são bem leves, multiplataforma, já estou a criar sistemas em OOP e MVC (sim, banco de dados), e até setup/instaladores para Windows e Linux. Criei alguns sistemas completos.

Meu cenário de desenvolvimento

  • SO Linux Ubuntu 18.04
  • Python 3.6
  • Tkinter 8.6

A GUI que criei para ilustração é está:
GUI feita com tkinter.ttk

Código fonte

# -*- coding: utf-8 -*-
from tkinter import Tk, PhotoImage
from tkinter import Entry as tkEntry
from tkinter.ttk import Frame, Label, Button, Entry, Separator, Style


'''
Title: Modern Interface for Python with Tkinter
by ngoma for Tabnews, 29.11.2022, Huambo-Angola
'''

# funcoes
def login():
    et_email.delete(0, 'end')
    et_senha.delete(0, 'end')
    et_email.focus_force()

def nova_conta():
    et_email.focus_force()

# primeira linha
root = Tk()

# frames
borda = Frame(root, style='Borda.TFrame')
borda.pack(fill='x', expand=True)

topo = Frame(borda)
topo.pack()

centro = Frame(borda)
centro.pack()

base = Frame(borda)
base.pack()

logo = PhotoImage(file=r'img/logo_d.png')
lb_logo = Label(topo, image=logo)
lb_logo.image = logo
lb_logo.pack()

Label(centro, text='E-mail').pack(anchor='w', pady=(10,0))
et_email = tkEntry(centro, font=('Montserrat', 12, 'bold'), fg='#666', relief='flat', 
        highlightbackground='white', highlightcolor='white')
et_email.focus_force()
et_email.pack(fill='x')
Separator(centro, orient='horizontal').pack(fill='x')

Label(centro, text='Senha').pack(anchor='w', pady=(10,0))
et_senha =  tkEntry(centro, show='*', font=('Montserrat', 12, 'bold'), fg='#666', relief='flat', 
        highlightbackground='white', highlightcolor='white')
et_senha.pack()
Separator(centro, orient='horizontal').pack(fill='x', pady=(0,20))

Button(base, text='ENTRAR', command=login, cursor='hand1').pack(fill='x', pady=(0,10))
Label(base, text='Ainda não tens uma conta? ', style='Small.TLabel').pack(side='left')
Button(base, text='Crie agora.', command=nova_conta, cursor='hand1', style='Small.TButton').pack(side='left')


# fontes
Tfont = ('Montserrat ExtraBold', 22)
Pfont = ('Montserrat', 10)
Pfontb = ('Montserrat', 12, 'bold')
Sfont = ('Montserrat', 8)


# estilo
style = Style()
style.theme_use('default')
style.configure('TFrame', background='#fff')
style.configure('Borda.TFrame', width=300)
style.configure('TLabel', justify='right', font=Pfont, background='#fff', foreground='#808080')
style.configure('Small.TLabel', font=Sfont)
style.configure('TButton', padding=(60,7), font=Pfontb, foreground='#fff', background='#20bcbb', relief='')
style.configure('Small.TButton', padding=(0,-3), font=Sfont, width=0, height=0, foreground='#20bcbb', background='#fff', relief='')
style.configure('TSeparator', background='#bafafa')

style.map('TButton',
        foreground=[('pressed', '#e25ca5'), ('active', '#fff')],
        background=[('pressed', '!focus', '#3f8efc'), ('active', '#025b5a')],
        relief=[('pressed', 'flat'), ('!pressed', 'flat')])

style.map('Small.TButton',
        foreground=[('pressed', '#f3bb30'), ('active', '#025b5a')],
        background=[('pressed', '!focus', '#3f8efc'), ('active', '#fff')],
        relief=[('pressed', 'flat'), ('!pressed', 'flat')])

# ultimas linhas
root.title('Design moderno - tkinter')
root.geometry('400x550+100+100')
root.iconphoto(False, PhotoImage(file='img/logo_da.png'))
root.configure(bg='#fff')
root.mainloop()

O que acharam?

Carregando publicação patrocinada...
2
1

leogabriel que bom que achou interessante, já somos dois, como deixo claro no post muitas vezes o problema não é a ferramenta e sim quem a usa. Se quiseres clique aqui para veres outros programas, feitos com TKInter, acredito que acharás mais interessante ainda 🤩️. Abraços...

1
0