【发布时间】:2018-07-30 09:43:50
【问题描述】:
我正在基于 tkinter 用 Python 编写一个 GUI 库,我正在设计和构建所有小部件,但我来到了 PopUp 菜单。 由于 tkinter 选择系统菜单并且无法自定义,我编写了以下代码来制作一个框架,我可以将自定义按钮放入其中并用作弹出窗口。
from tkinter import *
root = Tk()
w = Label(root, text="Right-click to display menu", width=40, height=20)
w.place(x=0)
def function1():
print('function1 activated')
# create a menu
f = Frame(root,width=80,height=60,background='green')
b2 = Button(f,text='function',command=function1)
b2.pack()
def open_popup(event):
try:
f.place(x=event.x, y=event.y)
root.after(1)
f.focus_set()
w.bind_all("<Button-1>",close_popup)
except:
print("Can't open popup menu")
def close_popup(event):
try:
f.place_forget()
root.after(1)
w.unbind_all("<Button-1>")
except:
print("Can't close popup menu")
w.bind("<Button-3>", open_popup)
b = Button(root, text="Quit", command=root.destroy)
b.pack()
root.mainloop()
一切正常,如果我用鼠标右键单击弹出菜单,如果我单击其他所有部分,弹出菜单就会消失。
问题是,由于bind_all 当我按下弹出菜单的按钮时,function1 不会运行并且事件处理程序会关闭弹出窗口。我只尝试了bind,但这一次,function1 运行并且事件处理程序没有激活。
反正我能做到吗? 谢谢
【问题讨论】:
标签: python events tkinter popup