Tkinter Tutorial - Menubar

  1. Tkinter Menubar Básico
  2. Comando Tkinter Menubar

Um dos elementos mais comuns na GUI é a barra de menu. Uma barra de menu está normalmente sob a barra de título para exibir as séries de menus. Depois de clicar num dos menus de nível superior, um sub-menu será estendido para exibir itens de menu mais relevantes. Um sub-menu é normalmente vinculado ao comando específico como open, close, save ou quit.

Tkinter Menubar Básico

Vamos criar o nosso primeiro exemplo de menubar que tem o menu File como na maioria dos editores. Incluímos apenas sub-menus Abrir, Salvar e Sair para simplificar.

Tkinter Menubar_Basic.py
import tkinter as tk
 
app = tk.Tk() 
app.geometry('300x200')
app.title("Basic Menu Bar")

menubar = tk.Menu(app)

filemenu = tk.Menu(menubar)
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_command(label="Exit")

menubar.add_cascade(label="File", menu=filemenu)

app.config(menu=menubar)

app.mainloop()

Tkinter Menubar Basic

menubar = tk.Menu(app)

O parâmetro dado do Menu é o widget pai do menu criado. A linha de código acima significa que o menu widget menubar será o nível superior do frame app.

filemenu = tk.Menu(menubar)

Da mesma forma, o filemenu é o menu do widget menubar, ou sub menu do frame app.

filemenu.add_command(label="Open")

O add_command adiciona os comandos ao menu filemenu. O label é o texto exibido no submenu.

menubar.add_cascade(label="File", menu=filemenu)

O filemenu é adicionado ao menubar com o comando add_cascade. File é a etiqueta do menu exibida no nível superior do frame app.

app.config(menu=menubar)

Embora o menubar seja criado para ser o widget filho do app como explicamos acima, você ainda precisa configurá-lo para ser o menu do app. Caso contrário, nenhuma barra de menu será mostrada na GUI.

Ela não responde em nada se você clicar nas opções como Open ou Save no submenu de File porque ainda não há nenhum comando anexado a elas. Nós vamos fazer o comando funcionar na próxima sessão.

Comando Tkinter Menubar

Tkinter Menubar_Command.py
import tkinter as tk
from tkinter import filedialog

def onOpen():
    print(filedialog.askopenfilename(initialdir = "/",title = "Open file",filetypes = (("Python files","*.py;*.pyw"),("All files","*.*"))))
 
def onSave():
    print(filedialog.asksaveasfilename(initialdir = "/",title = "Save as",filetypes = (("Python files","*.py;*.pyw"),("All files","*.*"))))
 
app = tk.Tk() 
app.geometry('300x200')
app.title("Menu Bar Command")

menubar = tk.Menu(app)

filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="Open", command=onOpen)
filemenu.add_command(label="Save", command=onSave)
filemenu.add_command(label="Exit", command=app.quit)

menubar.add_cascade(label="File", menu=filemenu)

app.config(menu=menubar)

app.mainloop()

filemenu = tk.Menu(menubar, tearoff=0)

O tearoff está definido para ser 1 por padrão e ele destacaria os menus da janela principal para criar um menu flutuante se as linhas pontilhadas no topo fossem clicadas. Aqui ele está definido para ser 0 para desativar essa função flutuante.

filemenu.add_command(label="Open", command=onOpen)

A função OnOpen está vinculada ao menu Open, e será chamada quando Open for clicada.

def onOpen():
    print(filedialog.askopenfilename(initialdir = "/",title = "Open file",filetypes = (("Python files","*.py;*.pyw"),("All files","*.*"))))

Esta função exibe o diálogo aberto e retorna o nome do arquivo selecionado. Nós realmente não abrimos o arquivo no nosso exemplo, mas para imprimir seu nome de arquivo.

O tkfiledialog tem três funções,

Função Parâmetros Descrição
.askopenfilename Diretório, Título, Extensão Para abrir arquivo: Diálogo que solicita a selecção de um ficheiro existente.
.asksaveasfilename Diretório, Título, Extensão Para guardar* arquivo: Diálogo que solicita a criação ou substituição de um ficheiro.
.askdirectory Nenhum Para abrir diretório*
filemenu.add_command(label="Exit", command=app.quit)

Tkinter tem uma função interna quit que sai da GUI raiz. Nós poderíamos simplesmente ligar esta função existente à função Exit ao invés de criar a nossa própria função exit.