如何让Tkinter右键菜单仅在指定Text控件生效,而非整个窗口
解决方法
你当前右键菜单全窗口生效的原因是将<Button-3>右键事件绑定到了顶级窗口win上,窗口范围内所有右键操作都会触发回调函数。想要仅在texty文本控件上触发菜单无需自定义类,只要修改事件绑定的目标对象即可:
将原有代码中绑定到窗口的代码:win.bind("<Button-3>", menu_popup)
修改为绑定到目标文本控件:texty.bind("<Button-3>", menu_popup)
如果后续需要给其他控件添加独立右键菜单,只要给对应控件单独绑定对应的菜单回调函数即可,不需要额外封装自定义类。
修改后的完整可运行代码如下:
from tkinter import * from tkinter import ttk def menu_popup(event): try: popup.tk_popup(event.x_root, event.y_root, 0) finally: popup.grab_release() win = Tk() win.geometry("600x550+125+125") e = Entry(win, width=50, font=('Helvetica', 11)) e.pack() e.insert(0, "Some text....") label = Label(win, text="Right-click to see a menu", font= ('Helvetica 18')) label.pack(pady= 40) texty=Text(win, height=10) texty.pack() popup = Menu(texty, tearoff=0) popup.add_command(label="New") popup.add_separator() popup.add_command(label="Open") popup.add_separator() popup.add_command(label="Close") # 仅给texty控件绑定右键事件 texty.bind("<Button-3>", menu_popup) button = ttk.Button(win, text="Quit", command=win.destroy) button.pack() mainloop()
内容的提问来源于stack exchange,提问作者egghead jr
相关产品推荐
相关产品推荐

