我怎樣才能得到一個返回的對象返回(或變量,或任何 - 他們都基本上是相同的,是不是)從作爲一個Tkinter的回調執行的功能?Python的 - 從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)'到按鈕的返回。 – 2012-08-10 14:36:19
您可以用'lambda'函數替換調用'partial'繞開這個問題:'命令=拉姆達X = var.get()平方(X)'。你也可以設置一個'var.trace()'。 – 2012-08-10 14:57:25