如何使tkinter右键菜单只在一个小部件上工作?



是否有一种简单的方法可以让右键菜单只打开文本而不是整个窗口?

这是一个快速的混搭来说明我的问题。从text25行继承是在黑暗中拍摄的,这没有工作,但它接近于一个简单的解决方案,就像我正在寻找。我希望每次我想设置一个右键菜单时,都能避免编程一整节课。

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")
win.bind("<Button-3>", menu_popup)
button = ttk.Button(win, text="Quit", command=win.destroy)
button.pack()
mainloop()

应该为相应事件执行回调的小部件由您在其上调用bind的小部件(以及绑定级别*)决定。因此,如果您希望事件在texty中被识别,那么就对它应用绑定。

texty.bind("<Button-3>", menu_popup)

*有bind_all执行,无论哪个部件有焦点或被调用。阅读54.1。更多信息的绑定级别

最新更新