為什麼在聲明時執行 Button 參數「command」?
在 Python 中,Button 小部件的「command」參數負責定義回呼函數。然而,當這個回調函數似乎在聲明按鈕後立即執行時,用戶可能會感到困惑。
當「command」參數被指派函數呼叫表達式而非函數物件時,就會出現此問題。例如:
def Hello():
print("Hi there!")
Button(frame, text="Hello", command=Hello()) # Function call expression
在此程式碼中,表達式「Hello()」立即呼叫Hello函數,並傳回其傳回值。結果,回調函數在建立 Button 之前執行,導致「Hi There!」訊息被印到控制台。
要避免此問題並將函數物件指派給「command」參數,請使用不含括號的函式名稱:
Button(frame, text="Hello", command=Hello) # Function object
函數物件保存對其程式碼的引用,這些程式碼將在呼叫回調時執行。另外,如果需要傳遞參數,可以使用lambda 表達式:
Button(frame, text="Hello", command=lambda: Goodnight("Moon"))
在本例中,lambda 表達式包裝Goodnight("Moon") 調用,延遲其執行,直到單擊按鈕。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3