作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个图形用户界面,其中我创建了一个右键单击弹出菜单,其中几乎没有选项。现在我的问题是如何将一些变量或值或参数或字符串传递给弹出菜单中包含的命令。我使用下面的代码来生成弹出菜单。
from Tkinter import *
root = Tk()
w = Label(root, text="Right-click to display menu", width=40, height=20)
w.pack()
# create a menu
popup = Menu(root, tearoff=0)
popup.add_command(label="Next", command=next(a,b))
popup.add_command(label="Previous")
popup.add_separator()
popup.add_command(label="Home")
def do_popup(event,a,b):
# display the popup menu
try:
popup.tk_popup(event.x_root, event.y_root)
finally:
# make sure to release the grab (Tk 8.0a1 only)
popup.grab_release()
def next(event,a,b):
print a
print b
w.bind("<Button-3>",lambda e, a=1, b=2: do_popup(e,a,b))
b = Button(root, text="Quit", command=root.destroy)
b.pack()
mainloop()
上面的代码我想将 a 和 b 的值传递给下一个命令。如何做到这一点。
谢谢。
最佳答案
您需要存储这些值才能在 next
事件处理程序中使用它们。您可以采取一些解决办法,例如使用 popup.values = (a, b)
在 Menu 对象中添加引用,但最简洁的方法是使用类来表示 GUI。
请注意,这就像继承 Tkinter 小部件并添加要存储的值一样简单:
from Tkinter import *
class App(Tk):
def __init__(self):
Tk.__init__(self)
self.a = 1
self.b = 2
self.label = Label(self, text="Right-click to display menu", width=40, height=20)
self.button = Button(self, text="Quit", command=self.destroy)
self.label.bind("<Button-3>", self.do_popup)
self.label.pack()
self.button.pack()
def do_popup(self, event):
popup = Popup(self, self.a, self.b)
try:
popup.tk_popup(event.x_root, event.y_root)
finally:
popup.grab_release()
class Popup(Menu):
def __init__(self, master, a, b):
Menu.__init__(self, master, tearoff=0)
self.a = a
self.b = b
self.add_command(label="Next", command=self.next)
self.add_command(label="Previous")
self.add_separator()
self.add_command(label="Home")
def next(self):
print self.a, self.b
app = App()
app.mainloop()
关于python - 如何在 python tkinter 中右键单击时将值传递给弹出命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15464386/
我是一名优秀的程序员,十分优秀!