2012-10-27 82 views
7

我如何獲得返回值A到C?順便說一下,我沒有使用課堂。python tkinter從命令中使用的函數返回值

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 

回答

3

你可以稱之爲C.setbutton函數中:

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C.set(A) 
    # return A # return values are useless here 
7

簡短的回答:你不能。回調不能返回任何東西,因爲沒有地方可以返回它 - 除了事件循環,它不會對返回值做任何事情。

在基於事件的應用程序中,您通常要做的是在類上設置屬性。或者,如果你是初學者,你可以設置一個全局變量。使用全局變量對於需要隨時間維護的實際代碼並不是一個好主意,但對於實驗來說可以。

因此,舉例來說,由於C似乎是在你的例子一個全局變量,你會做這樣的事情:

def button(): 
    global C 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C = A 
2

很容易只是聲明瞭一個全球性。

def button: 
global A 
mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
A = B.get() 
return A 

B = StringVar()` 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 
# and then A is not empty 
B= A 
0

老問題,但大多數答案建議一個全局變量。我不喜歡在我的項目中使用太多的全局變量,所以這是我的解決方案。

當聲明Tkinter按鈕時,可以使用lambda函數作爲命令。這個lambda可以與您定義的按鈕位於相同名稱空間內的變量進行交互。確保在初始化按鈕之前定義這個變量。

def button(): 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = lambda: C=button()).grid(row = 1, column = 1) 

您可能需要有self爲根據您的項目組織的論據button,但概念是相同的。 Lambda命令對於將參數傳遞給按鈕命令也很有用。