PopUpMenu
Um menu de contexto ou um menu pop-up é um menu em uma interface gráfica do usuário (GUI) que aparece em cima de interação do usuário, como uma operação de clique com o botão direito do mouse. Um menu de contexto oferece um conjunto limitado de opções que estão disponíveis no estado atual, ou contexto, do sistema operacional ou aplicativo. Normalmente, as opções disponíveis são as ações relacionadas com o objeto selecionado.
Os menus de contexto foram introduzidos no ambiente Smalltalk do computador Xerox Alto, onde eram chamados menus pop-up. O sistema operacional NEXTSTEP desenvolveu a ideia, incorporando a funcionalidade em que o botão do meio ou o da direita traziam o menu principal na posição do mouse, eliminando a necessidade de mover o ponteiro por toda a tela. Esse menu principal era vertical e mudava de acordo com o texto da operação do sistema.
Exemplo:
Neste exemplo criamos um PopUpMenu usando o widget Menu do Tkinter e usamos o método bind do Tk referenciando o terceiro botão do mouse (botão direito) criando o efeito de um menu de contexto.
#!/usr/bin/env python # -*- coding: latin-1 -*- # Desenvolvimento Aberto # PopupMenu.py # importa modulo from Tkinter import * # Cria formulario formulario = Tk() formulario.title = "Desenvolvimento Aberto" # Declara variaves do label txt = StringVar() msg = "Voce clicou no: " # Declara eventos dos itens do menu def menu1_1(): txt.set(msg + "Menu 1, item 1") def menu1_2(): txt.set(msg + "Menu 1, item 2") def menu1_3(): txt.set(msg + "Menu 1, item 3") def popup(event): PopUpMenu.post(event.x_root, event.y_root) # Declara label titulo = Label(formulario, text="Clique com o botao direito do mouse") texto = Label(formulario, textvariable= txt ) # Declara menu PopUpMenu = Menu(formulario, tearoff=0) # Cria itens do menu PopUpMenu.add_command(label = "Item1", command = menu1_1) PopUpMenu.add_command(label = "Item2", command = menu1_2) PopUpMenu.add_separator() PopUpMenu.add_command(label = "Item3", command = menu1_3) # Adiciona tamanho do formulario formulario.geometry("300x200") # Adiciona evento do botão direito do mouse formulario.bind("<Button-3>", popup) # Cria layout do formulario titulo.grid(row=0, sticky=W, padx=40) texto.grid(row=1, sticky=W, padx=40, pady=160) # Loop principal do tcl mainloop()