我讀過這個問題的答案:在 Tkinter 中如何傳遞被調用函數作為參數?雖然它看起來相關,但它似乎并沒有回答我的問題,因為上述問題中的問題在于調用用戶定義的函數。我將一個被調用的方法(tkinter StringVar 的 .get() 方法)傳遞給內置的“print”函數。我的代碼如下:import tkinter as tkfrom functools import partialdef print_called(variable): print(variable.get())try: root = tk.Tk() var = tk.StringVar() options = tk.OptionMenu(root, var, 'string 1', 'string 2', 'string 3', 'string 4') button_1 = tk.Button(root, text='button_1', command=partial(print_called, var)) button_2 = tk.Button(root, text='Button_2', command=partial(print, var.get())) options.pack() button_1.pack() button_2.pack()finally: root.mainloop()我運行上面的代碼并從菜單中選擇“字符串 1”。當我單擊“button_1”時,它會按預期打印“字符串 1”。當我單擊“button_2”時,它會打印一個空行。我的問題是:為什么會出現這種情況?兩者為何有差異?如何將 var.get() 的結果(即字符串“string 1”)作為參數傳遞給函數?
1 回答

慕村9548890
TA貢獻1884條經驗 獲得超4個贊
command=partial(print, var.get())
button_2
創建時直接評估。此時未選擇任何內容,并var.get()
返回空字符串。
您可以使用 lambda 函數: command=lambda: print(var.get())
,但這與您在 中所做的幾乎相同button_1
,只是使用 lambda 函數而不是普通函數。
添加回答
舉報
0/150
提交
取消