首頁 >後端開發 >Python教學 >如何將唯一參數傳遞給循環中建立的多個 Tkinter 按鈕?

如何將唯一參數傳遞給循環中建立的多個 Tkinter 按鈕?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-26 22:06:18678瀏覽

How Can I Pass Unique Arguments to Multiple Tkinter Buttons Created in a Loop?

使用命令參數來了解 Tkinter 中的按鈕建立

在 Tkinter 中,在循環中建立多個按鈕對於產生動態使用者介面非常有用。但是,將命令參數傳遞給按鈕可能會帶來挑戰,尤其是在嘗試區分按下了哪個按鈕時。

考慮以下程式碼,其中建立的按鈕的標題會透過循環計數器遞增:

def createGameURLs(self):
    self.button = []
    for i in range(3):
        self.button.append(Button(self, text='Game '+str(i+1),
                                  command=lambda: self.open_this(i)))
        self.button[i].grid(column=4, row=i+1, sticky=W)

def open_this(self, myNum):
    print(myNum)

當我們嘗試在按一下其中任何一個按鈕時列印按鈕的識別碼(myNum) 時,就會出現問題。輸出始終顯示 2,即上次迭代的值。這種行為表明,儘管按鈕的標題不同,但它們本質上是無法區分的。

解決問題

要解決此問題,我們需要確保每個按鈕在創作時間。為了實現這一點,我們可以採用一種巧妙的lambda 函數技術:

def createGameURLs(self):
    self.button = []
    for i in range(3):
        self.button.append(Button(self, text='Game '+str(i+1),
                                  command=lambda i=i: self.open_this(i)))
        self.button[i].grid(column=4, row=i+1, sticky=W)

def open_this(self, myNum):
    print(myNum)

透過在lambda 函數中添加賦值i=i,我們可以有效地「凍結」 lambda 時i 的當前值被定義。這確保了即使在循環完成後每個按鈕仍保持其唯一識別碼。

結論

這種技術允許我們在循環內動態創建多個 Tkinter 按鈕,其中每個按鈕可以在以下情況下被唯一標識:點擊。透過了解 lambda 函數和閉包的行為,我們可以在 Tkinter 應用程式中實現更多控制和靈活性。

以上是如何將唯一參數傳遞給循環中建立的多個 Tkinter 按鈕?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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