為什麼在建立按鈕指令時立即執行?
在 Tkinter 中,將命令分配給按鈕可能會導致意外行為,其中該命令創建按鈕後立即執行,而不是單擊按鈕時執行。這是因為命令選項的工作方式。
當您將指令參數指定為 Button(... command=button('hey')) 時,您實際上傳遞的是呼叫 button('嘿')到指令選項。這意味著按鈕函數會立即執行,並將返回值指派給命令參數。
解決方案:傳遞對函數的引用
要避免這種情況問題,您需要傳遞對該函數的引用,而不是立即執行它。這可以使用 lambda 函數、functools.partial 或中間函數來完成。
使用 Lambda 函數
Lambda 函數提供了一種建立匿名函數的簡單方法,該函數可以可以作為參考。例如:
b = Button(... command=lambda: button('hey'))
此 lambda 函數建立一個無名函數,呼叫時會使用參數「hey」執行按鈕函數。然後可以將此引用傳遞給按鈕的命令參數。
替代方法
結論
透過傳遞對函數的引用而不是立即執行它,您可以確保按鈕命令僅在按預期單擊按鈕。
以上是為什麼我的 Tkinter 按鈕立即執行命令而不是單擊時執行命令?的詳細內容。更多資訊請關注PHP中文網其他相關文章!