首頁  >  文章  >  後端開發  >  為什麼按鈕“命令”在聲明後立即執行?

為什麼按鈕“命令”在聲明後立即執行?

Barbara Streisand
Barbara Streisand原創
2024-10-19 07:59:01383瀏覽

Why Does the Button

為什麼 Button 參數「command」在聲明時會被執行?

在 Python 中,Button 小部件的「command」參數負責定義回呼函數。然而,當這個回調函數似乎在聲明 Button 後立即執行時,使用者可能會感到困惑。

當「command」參數被指派函數呼叫表達式而不是函數物件時,就會出現此問題。例如:

<code class="python">def Hello():
    print("Hi there!")

Button(frame, text="Hello", command=Hello())  # Function call expression</code>

在此程式碼中,表達式「Hello()」立即呼叫 Hello 函數,並傳回其傳回值。結果,回調函數在建立 Button 之前執行,導致「Hi There!」訊息被印到控制台。

要避免此問題並將函數物件指派給「command」參數,請使用不含括號的函數名稱:

<code class="python">Button(frame, text="Hello", command=Hello)  # Function object</code>

函數物件儲存對他們的程式碼,將在調用回調時執行。此外,如果需要傳遞參數,可以使用 lambda 表達式:

<code class="python">Button(frame, text="Hello", command=lambda: Goodnight("Moon"))</code>

在這種情況下,lambda 表達式包裝 Goodnight("Moon") 調用,延遲其執行,直到單擊按鈕。

以上是為什麼按鈕“命令”在聲明後立即執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn