Menu

fr = tk.Menu(parent, opcao=valor, ...)

Cria um menu Frame numa janela ou numa frame, ‘parent’.

O construtor retorna o objeto Menu.

Atributos

OpçãoDescrição
activebackgroundCor de fundo quando o cursor está sobre uma opção do menu.
activeborderwidthEspessura da borda à volta da opção do menu quando o rato está sobre ela.
activeforegroundCor de primeiro plano de uma opção quando o rato está sobre ela.
bd ou borderwidthEspessura da borda à volta de todas as opções do menu.
bg ou backgroundCor de fundo das opções do menu.
cursorCursor que aparece quando o rato está sobre as opções do menu.
disableforegroundCor do texto para as opções cujo estado seja tk.DISABLED .
fontFonte de defeito para opções textuais.
fg ou foregroundCor de primeiro plano das opções do menu.
postcommandDefine uma função de callback que será chamada de cada vez que o menu fôr chamado.
reliefO tipo de relevo do menu é tk.RAISED. Pode-se definir outros estilos de relevo.
selectcolorEspecifica a cor de radiobuttons e checkbuttons quando são selecionados.
tearoffControla se um menu pode ser “destacado” (tornado flutuante) da janela principal, criando uma janela separada com o mesmo conteúdo do menu.
tearoffcommandSe igual a zero a scrollbar não receberá o foco a partir do teclado.
titleLargura da scrollbar (a sua dimensão y se a scrollbar fôr horizontal, dimensão x se a scrollbar fôr vertical). Valor de defeito = 16.

Métodos

.add(tipo, opcoes) : adiciona uma nova opção de menu de um determinado tipo a um menu. tipo pode ser: ‘cascade’, ‘checkbutton’, ‘command’, ‘radiobutton’, ou ‘separator’

.add_cascade(opcoes) : adiciona um submenu como uma nova opção de um menu.

.add_checkbutton(opcoes) : adiciona um checkbutton como uma opção de um menu.

.add_radiobutton(opcoes) : adiciona um radiobutton como uma opção de um menu.

.add_command(opcoes) : adiciona uma opção a um menu.

.add_separator(opcoes) : adiciona um separador ao menu. É relevante na contagem de opções do menu.

.delete(indice1, indice2=None) : elimina as opções do menu de indice1 a indice2, inclusive. Sem o 2º argumento elimina a opção indice1.

.entryconfigure(indice, opcoes) : permite alterar uma propriedade de uma opção do menu.

.index(item) : retorna o índice do item do menu.

.add_cascade(opcoes) : adiciona um submenu como uma nova opção de um menu.

.add_checkbutton(opcoes) : adiciona um checkbutton como uma opção de um menu.

.add_radiobutton(opcoes) : adiciona um radiobutton como uma opção de um menu.

.add_command(opcoes) : adiciona uma opção a um menu.

.add_separator(opcoes) : adiciona um separador ao menu. É relevcante na contagem de opções do menu.

.insert_cascade(indice, opcoes) : insere um submenu como uma nova opção de um menu,na posição indice.

.insert_checkbutton(indice, opcoes) : insere um checkbutton como uma opção de um menu,na posição indice.

.insert_radiobutton(indice, opcoes) : insere um radiobutton como uma opção de um menu,na posição indice.

.insert_command(indice, opcoes) : insere uma opção a um menu,na posição indice.

.insert_separator(indice, opcoes) : insere um separador ao menu,na posição indice. É relevcante na contagem de opções do menu,na posição indice.

.invoke(indice) : chama a função de callback associada à opção indice. Se fôr um checkbutton, alterna entre on e off; se fôr um radiobutton, seleciona-o

.type(indice) : retorna o tipo de opção do menu. Pode ser tk.CASCADE, tk.CHECKBUTTON, tk.COMMAND, tk.RADIOBUTTON, tk.SEPARATOR, ou tk.TEAROFF

Exemplo 1:

from tkinter import *
from tkinter import messagebox

window = Tk()
window.title("Tkinter - Menu")
window.geometry("200x100")

def domenu(action):
    messagebox.showinfo("Menu acção", action)


menubar = Menu(window)

#Menu Ficheiro:
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Novo", command=lambda: domenu('Novo'))
filemenu.add_command(label="Abrir", command=lambda: domenu('Abrir'))
filemenu.add_command(label="Guardar", command=lambda: domenu('Guardar'))
filemenu.add_command(label="Fechar", command=lambda: domenu('Fechar'))

filemenu.add_separator()

filemenu.add_command(label="Sair", command=window.quit)
menubar.add_cascade(label="Ficheiro", menu=filemenu)

#Menu Editar:
editmenu = Menu(menubar, tearoff=0)

editmenu.add_command(label="Cortar", command=lambda: domenu('Cortar'))
editmenu.add_command(label="Copiar", command=lambda: domenu('Copiar'))
editmenu.add_command(label="Colar", command=lambda: domenu('Colar'))
editmenu.add_command(label="Eliminar", command=lambda: domenu('Eliminar'))

menubar.add_cascade(label="Editar", menu=editmenu)


#Adiciona barra de menu à janela:
window.config(menu=menubar)


window.mainloop()

Saída :

Exemplo 2:

Criação de um menu popup:

from tkinter import *

window = Tk()
window.title("Tkinter - Menu")
window.geometry("200x100")

#mostra o menu popup:
def popup(event):
menupopup.post(event.x_root, event.y_root)

def do():
pass

#ao clicar no botao direito do rato, chaa a função popup():
window.bind("<Button-3>",popup)


#cria o menu popup:
menupopup = Menu(window, tearoff=0)

menupopup1 = Menu(menupopup, tearoff=0)
menupopup1.add_command(label="Test1", command=do)
menupopup1.add_command(label="Test2", command=do)
menupopup1.add_command(label="Test3", command=do)
menupopup2 = Menu(menupopup, tearoff=0)
menupopup2.add_command(label="Test1", command=do)
menupopup2.add_command(label="Test2", command=do)
menupopup2.add_command(label="Test3", command=do)

menupopup.add_cascade(label="Test1", menu=menupopup1)
menupopup.add_cascade(label="Test2", menu=menupopup2)


window.mainloop()

Saída :