我在單個目錄中有許多測試文件。我正在嘗試編寫一個GUI來允許我選擇並運行其中的一個。有關將參數傳遞給tkinter按鈕命令的更多信息
所以,我有一個循環,掃描目錄,並創建按鈕:
for fnm in glob.glob ('Run*.py'):
tstName = fnm[3:-3] # Discard fixed part of filename
btn = Button (self, text=tstName,
command=lambda: self.test(tstName))
btn.grid (row=rowNum, column=0, pady=2)
rowNum += 1
這正確創建我的GUI,用標記的按鈕說,A和B,但是當我按下按鈕標記爲A它傳遞B
至test
方法。
我環顧四周,發現這個問題How can I pass arguments to Tkinter button's callback command?,但答案並沒有繼續使用相同的變量名,用不同的值來配置另一個小部件。 (事實上,通過捆綁變量名部件名幾乎意味着該技術不會在這種情況下工作,因爲我發現。)
我到Python非常新的,但我對使用Tcl/TK創建這種圖形用戶界面非常熟悉,我認識到這個問題 - 當我按下按鈕時,會傳遞tstName
的值,但我希望它能夠傳遞變量在創建時的值。我知道如何在Tcl/Tk中解決這個問題 - 我會在創建時使用[list]
來定義一個命令字符串,它將捕獲變量的值。
如何在Python中執行相同的操作?
或'functools.partial(個體經營.test,tstName)' –
謝謝布賴恩 - 這是訣竅。如果有人會提供一個鏈接到'lambda'的文檔,我會很感激。 – nurdglaw