2014-03-28 51 views
0

如何通過按鈕將參數傳遞給函數?Python Tkinter - 用按鈕傳遞值

variable = str() 

def RandomFunction(variable): 
    print (variable) 

EntryBox = Entry(MainWindow, textvariable = variable).pack() 
FunctionCall = Button(MainWindow, text="Enter", command=RandomFunction(variable)) 

它似乎只是按下按鈕時不打印任何東西。我搜索了四周,似乎使用lambda可以修復它,並允許(可變)傳遞給函數,但在lambda variable:variable試驗後,我仍然無法使它工作。

+0

什麼是變量?它沒有在該代碼中定義。 –

+0

字符串,在開始時初始化它 – user3091974

+0

我的回答如何?我不認爲你正在使用'lambda'。 –

回答

1

這裏的其他答案工作,但就像生活中很多事情,有做你想做什麼方法不止一種。

您問題中的代碼實際上混合了一些從Entry小部件獲取數據的方法。你正在使用textvariable和lambda,但你只需要一個。好像拉姆達已經被覆蓋,所以這裏是關於textvariable一個快速的答案:

首先,你需要讓你的一個Tkinter的字符串類型的變量是這樣的:

variable = StringVar() 

您的輸入插件是好的,它的連接到StringVar()。不過,你的按鈕不需要lambda,因爲你不需要傳遞一個參數給你的RandomFunction()。

FunctionCall = Button(MainWindow, text='Enter', command=RandomFunction).pack() 

最後,你的功能需要一點點的返工,因爲它沒有考慮一個參數了,它只是將使用獲得()方法在你STRINGVAR()時,它被稱爲:

def RandomFunction(): 
    print(variable.get()) 

你可以在這裏閱讀更多關於StringVar()的信息:http://effbot.org/tkinterbook/variable.htm

+0

我也試過這種方法,我收到錯誤消息:屬性錯誤:'str'對象沒有'get'屬性。 – user3091974

+0

嘗試刪除'.get()'然後。有時需要一些簡單的調試。 – atlasologist

+0

但後來我無法訪問函數內的變量 – user3091974

1

使用lambda創建調用帶參數的函數是罰款的功能(只要你正確地做到這一點):

FunctionCall = Button(MainWindow, text="Enter", command=lambda: RandomFunction(EntryBox.get)) 

Python會很樂意與這一點,因爲lambda沒有采取任何參數。

+0

我試過,雖然它不給我任何錯誤,它仍然看起來像它是打印是空白的? – user3091974

+0

呃,當然不是,沒有什麼會出現,因爲你沒有設置你的字符串的實際值。將變量設置爲''Hello,world!'',看看會發生什麼。 –

+0

輸入小部件允許您輸入文本,然後將其分配給該變量。我已將文本輸入到輸入框中,並且按下按鈕時仍不會打印。 – user3091974

1

您使用.get()來獲取條目的內容。從effbot頁面http://effbot.org/tkinterbook/entry.htm

from Tkinter import * 

master = Tk() 

e = Entry(master) 
e.pack() 
e.focus_set() 

def callback(): 
    print e.get() 

b = Button(master, text="get", width=10, command=callback) 
b.pack() 

master.mainloop() 
+0

這也適用,謝謝。 – user3091974