gpt4 book ai didi

python - 如何在 python tkinter 中右键单击时将值传递给弹出命令

转载 作者:行者123 更新时间:2023-11-30 23:37:31 24 4
gpt4 key购买 nike

我正在开发一个图形用户界面,其中我创建了一个右键单击弹出菜单,其中几乎没有选项。现在我的问题是如何将一些变量或值或参数或字符串传递给弹出菜单中包含的命令。我使用下面的代码来生成弹出菜单。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com