Create right-click context menu for copy-paste with app.add_tk_widget
frenchfaso opened this issue · 1 comments
frenchfaso commented
Hy there,
I'm trying to add a context menu to a simple app with this code:
from guizero import App, MenuBar, etc..
from tkinter import Menu
# my app code..
context_menu = Menu(tearoff = 0)
context_menu.add_command(label ="Paste")
app.add_tk_widget(context_menu)
but I get this error:
tkinter.TclError: can't pack ".!menu2": it's a top-level window
frenchfaso commented
I found a solution, adding the menu widget to a Box widget instead of the root app widget seems to work:
from guizero import App, Box, TextBox #etc..
from tkinter import Menu
# This function gets called when you right-click on the 'text_box' TextBox
def show_context_menu(event):
try:
context_menu.tk_popup(event.display_x, event.display_y)
finally:
context_menu.grab_release()
# This function gets called when you click on "Paste" on the context-menu
def paste_data():
text_box.tk.event_generate("<<Paste>>")
app = App(title="My Awesome Guizero App")
box = Box(app, width="fill")
text_box = TextBox(box, width="fill")
text_box.when_right_button_pressed=show_context_menu
context_menu = Menu(box.tk, tearoff = 0)
context_menu.add_command(label ="Paste", command=paste_data)
app.display()