【发布时间】:2012-08-07 20:52:27
【问题描述】:
如何从作为 Tkinter 回调执行的函数中获取返回的对象?
import Tkinter as Tk
from functools import partial
def square(x):
return x*x
root = Tk.Tk()
var = Tk.IntVar(root, value=0) #the variable the gets passed to the class call
menu = Tk.OptionMenu(root, var, *[0,1,2,3,4,5]) #a drop-down list to choose a value for the variable
menu.pack()
button = Tk.Button(root, text='click', command = partial(square,var.get())) #a button that calls the class
button.pack()
root.mainloop()
显然这是一个简化的例子。实际上,按钮调用的函数将返回对象,我希望将这些对象附加到将保存在主要 Python 命名空间中以进行进一步操作的对象列表。
无论如何,在这里用户可以使用 GUI 为函数选择一个参数,然后按下一个按钮来执行该函数。然而,函数的返回值似乎注定要丢失在以太中,因为回调不会接受返回。如果在square(x) 的定义中不使用丑陋的global,这是否可以克服?
【问题讨论】:
-
实际上,我认为在
partial中对var.get()的调用可能实际上不起作用,因为它将在创建按钮时进行评估,而不是在单击时进行评估。不过,不要让这个问题蒙混过关——我的问题实际上是关于从square(x)返回到按钮的问题。 -
您可以通过用
lambda函数替换对partial的调用来解决这个问题:command = lambda x=var.get(): square(x)。您还可以设置var.trace()。
标签: python callback tkinter return