LAB-8

Tkinter no Linux

1. POO Python no Linux

Normalmente, o Python já vem pré-instalado na maioria das distribuições Linux. Para verificar se ele está instalado e qual versão você tem, você pode usar o seguinte comando no terminal:

python3 --version

Se o Python 3 estiver instalado, isso retornará a versão. Caso ainda não esteja instalado, você pode instalá-lo com:

sudo apt-get update
sudo apt-get install python3

2. POO em Python - exemplos simples

1: Criar uma Classe Simples

Objetivo: Criar uma classe chamada Carro com atributos e métodos básicos com python no linux:

Crie um Diretório: Vamos criar um diretório para armazenar seus arquivos Python.

mkdir meuprojeto
cd meuprojeto

Crie o Arquivo carro.py: Use um editor de sua preferencia. Usaremos no exemplo po nano.

nano carro.py

Crie a classe Carro:

  • Atributos: marca, modelo, ano
  • Método: detalhes() que imprime os atributos do carro
				
					class Carro:
    def __init__(self, marca, modelo, ano):
        self.marca = marca
        self.modelo = modelo
        self.ano = ano

    def detalhes(self):
        print(f"Marca: {self.marca}, Modelo: {self.modelo}, Ano: {self.ano}")

# Teste
carro1 = Carro("Toyota", "Corolla", 2020)
carro1.detalhes()
				
			

Salve e Execute o arquivo em python

python3 carro.py

2. Criar uma Classe ContaBancaria

Crie o Arquivo conta_bancaria.py:

nano conta_bancaria.py
				
					class ContaBancaria:
    def __init__(self):
        self.__saldo = 0

    def depositar(self, valor):
        self.__saldo += valor

    def sacar(self, valor):
        if valor <= self.__saldo:
            self.__saldo -= valor
        else:
            print("Saldo insuficiente")

    def exibir_saldo(self):
        print(f"Saldo: {self.__saldo}")

# Teste
conta1 = ContaBancaria()
conta1.depositar(1000)
conta1.sacar(200)
conta1.exibir_saldo()
				
			

Salve e Execute o arquivo em python

python3 conta_bancaria.py

3. O que é o Tkinter?

O Tkinter é a biblioteca padrão do Python para a criação de interfaces gráficas (GUIs). Ele oferece uma maneira simples e rápida de desenvolver aplicativos gráficos, já que vem embutido com o Python, eliminando a necessidade de instalar pacotes adicionais.

Características do Tkinter:

  • Portabilidade: Funciona em várias plataformas, incluindo Windows, macOS e Linux.
  • Widgets Prontos: Fornece diversos widgets, como botões, rótulos, campos de texto, listas, entre outros, para criar interfaces interativas.
  • Integração Completa: Como é nativo do Python, facilita a integração com outras partes do seu código.
  • Documentação e Comunidade: Possui ampla documentação e suporte da comunidade, com muitos tutoriais e exemplos disponíveis online.

Uso Comum

Tkinter é frequentemente usado para criar aplicativos desktop simples ou protótipos, onde uma interface gráfica básica é suficiente. É ideal para quem está começando a explorar o desenvolvimento de GUIs.

Instalando Tkinter

A maioria das distribuições Linux já vem com o Tkinter instalado junto com o Python. Você pode verificar a instalação com:

sudo apt-get install python3-tk

Criando sua primeira interface gráfica

Aqui está um exemplo simples de como criar uma janela com Tkinter:

				
					import tkinter as tk

def criar_janela():
    # Cria a janela principal
    janela = tk.Tk()
    janela.title("Minha Primeira Janela")

    # Define o tamanho da janela
    janela.geometry("300x200")

    # Cria um rótulo
    rotulo = tk.Label(janela, text="Olá, Tkinter!")
    rotulo.pack(pady=20)  # Adiciona o rótulo à janela

    # Cria um botão
    botao = tk.Button(janela, text="Clique Aqui", command=janela.quit)
    botao.pack(pady=10)

    # Inicia o loop da interface
    janela.mainloop()

if __name__ == "__main__":
    criar_janela()
				
			

Explicação do Código

  • Importando Tkinter: Inicie importando o módulo tkinter (import tkinter as tk).
  • Criando a Janela Principal: Utilize tk.Tk() para criar a janela principal.
  • Adicionando Elementos: Use widgets como Label e Button para adicionar texto e botões.
  • Executando o Loop Principal: janela.mainloop() mantém a janela aberta e detecta interações do usuário.

4. Aprofundando no Tkinter?

Widgets no Tkinter

1. Entry (Campos de Texto)

O widget Entry permite a entrada de texto por parte do usuário. É ideal para formulários ou inputs rápidos.

				
					import tkinter as tk

def show_text():
    print(entry.get())

janela = tk.Tk()
janela.title("Exemplo de Entry")

entry = tk.Entry(janela)
entry.pack(pady=10)

button = tk.Button(janela, text="Mostrar Texto", command=show_text)
button.pack(pady=5)

janela.mainloop()
				
			

2. Frame (Contêineres)

Os Frame são usados para organizar widgets em grupos. Eles ajudam a estruturar a interface de forma lógica.

				
					import tkinter as tk

janela = tk.Tk()
janela.title("Exemplo de Frame")

frame = tk.Frame(janela, borderwidth=2, relief="solid")
frame.pack(padx=10, pady=10)

rotulo_dentro_frame = tk.Label(frame, text="Dentro do Frame")
rotulo_dentro_frame.pack(padx=5, pady=5)

janela.mainloop()
				
			

3. Canvas (Desenho)

O Canvas é usado para desenhar formas, gráficos, imagens, etc. É altamente flexível para personalização visual.

				
					import tkinter as tk

janela = tk.Tk()
janela.title("Exemplo de Canvas")

canvas = tk.Canvas(janela, width=200, height=100, bg="white")
canvas.pack(pady=10)

# Desenhando uma linha
canvas.create_line(0, 0, 200, 100, fill="blue")

janela.mainloop()
				
			

4. Button (Botões)

Os botões são essenciais para interações. Você pode associar funções aos cliques.

				
					import tkinter as tk

def on_click():
    print("Botão clicado!")

janela = tk.Tk()
janela.title("Exemplo de Button")

button = tk.Button(janela, text="Clique Aqui", command=on_click)
button.pack(pady=10)

janela.mainloop()
				
			

5. Label (Rótulos)

O Label é usado para exibir texto ou imagens estáticas.

				
					import tkinter as tk

janela = tk.Tk()
janela.title("Exemplo de Label")

label = tk.Label(janela, text="Este é um rótulo", font=("Arial", 12))
label.pack(pady=10)

janela.mainloop()
				
			

Gerenciadores de Layout no Tkinter

1. Pack

O método pack organiza widgets em blocos, alinhando-os em direção ao topo, fundo, esquerda ou direita da janela.

Syntax: widget.pack(option=value, …)

Opções Comuns:

  • side: Define o lado (topo, fundo, esquerda, direita) onde o widget será anexado (tk.TOP, tk.BOTTOM, tk.LEFT, tk.RIGHT).
  • fill: Expande o widget para preencher espaço adicional (tk.X, tk.Y, tk.BOTH).
  • expand: Permite que o widget use espaço extra disponível (True ou False).

Exemplo de Uso:

				
					import tkinter as tk

janela = tk.Tk()
botao1 = tk.Button(janela, text="Botão 1")
botao1.pack(side=tk.LEFT, fill=tk.Y)
botao2 = tk.Button(janela, text="Botão 2")
botao2.pack(side=tk.LEFT, fill=tk.Y)
janela.mainloop()
				
			

2. Grid

O grid organiza widgets em tabelas usando linhas e colunas, oferecendo controle mais preciso sobre a colocação.

Syntax: widget.grid(row=n, column=n, option=value, …)

Opções Comuns:

  • row e column: Define a linha e coluna onde o widget será colocado.
  • sticky: Alinha o widget dentro da célula (usos de direções do compasso, ex: tk.N, tk.S, tk.E, tk.W).
  • padx e pady: Define o preenchimento externo horizontal e vertical.

Exemplo de Uso:

				
					import tkinter as tk

janela = tk.Tk()
botao1 = tk.Button(janela, text="Botão 1")
botao1.grid(row=0, column=0)
botao2 = tk.Button(janela, text="Botão 2")
botao2.grid(row=0, column=1)
janela.mainloop()
				
			

3. Place

O place posiciona widgets em coordenadas específicas, fornecendo controle absoluto sobre a localização de cada widget.

Syntax: widget.place(x=x, y=y, option=value, …)

Opções Comuns:

  • x, y: Coordenadas precisas em pixels.
  • relx, rely: Coordenadas relativas (de 0.0 a 1.0) baseadas no tamanho do contêiner.
  • anchor: Define qual parte do widget é localizada na posição especificada (tk.CENTER, tk.NW, etc.).

Exemplo de Uso:

				
					import tkinter as tk

janela = tk.Tk()
botao1 = tk.Button(janela, text="Botão 1")
botao1.place(x=50, y=50)
botao2 = tk.Button(janela, text="Botão 2")
botao2.place(x=150, y=50)
janela.mainloop()
				
			

Sistema de Eventos no Tkinter

O que são Eventos?

Eventos são ações que ocorrem devido à interação do usuário com a interface, como cliques de mouse, pressionamento de teclas, entre outros. O Tkinter permite capturar e responder a esses eventos utilizando funções chamadas “callbacks”.

Lidando com Eventos

1. Eventos de Botão

Para associar uma função a um clique de botão, você pode usar o parâmetro command do widget Button.

2. Eventos de Teclado

Você pode capturar eventos de teclado usando o método bind.

3. Eventos de Mouse
O bind também pode ser usado para capturar cliques e movimentos do mouse.

Tipos Comuns de Eventos

  • Clique do Mouse: <Button-1>, <Button-2>, <Button-3>
  • Teclado: <Key>, <Return> (Enter), <Escape>
  • Movimento do Mouse: <Motion>
  • Eventos da Janela: <Configure>, <FocusIn>, <FocusOut>
				
					import tkinter as tk

def on_click():
    print("Botão clicado!")

def on_key(event):
    print(f"Tecla: {event.char}")

def on_mouse(event):
    print(f"Mouse na posição: {event.x}, {event.y}")

janela = tk.Tk()

# Botão com evento de clique
botao = tk.Button(janela, text="Clique Aqui", command=on_click)
botao.pack()

# Ligação para eventos de teclado e mouse
janela.bind('<Key>', on_key)
janela.bind('<Button-1>', on_mouse)

janela.mainloop()