使用獨特的命令參數在tkinter 中以程式設計方式建立按鈕
目前的任務是使用for 循環在tkinter 介面中產生多個按鈕。每個按鈕應包含一個唯一的命令參數,表示目前迭代計數。但是,現有程式碼產生具有一致列印值的按鈕,這表示命令參數分配存在潛在問題。
問題:消失的迭代值
提供的程式碼建立標題範圍從「遊戲 1」到「遊戲 3」的按鈕。單擊任何這些按鈕後,列印值始終為 2,對應於最後一次迭代計數。這表明命令參數被視為單一實體,而不是與每個單獨的按鈕關聯。
解決方案:保留迭代值
關鍵解決這個問題的方法是在為每個按鈕定義命令時保留當前的迭代值 (i)。為此,需要修改 lambda 表達式:
command=lambda i=i: self.open_this(i)
此 lambda 表達式將 i 的目前值指派給名為 i 的變數。這可確保在建立時捕獲 i 值並將其附加到特定按鈕。因此,每個按鈕都可以存取其唯一的迭代計數。
了解Lambda 閉包
透過使用i=i,閉包儲存i 的當前值在定義lambda 時,而不是依賴於呼叫函數時i 的值。這保留了每個按鈕的必要資訊。
固定程式碼
經過上述修改,修正的程式碼如下所示:
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)
現在,點擊任何按鈕,都會準確列印相應的迭代計數,解決了最初的問題。
以上是如何將獨特的參數傳遞給 Tkinter 按鈕循環中的指令?的詳細內容。更多資訊請關注PHP中文網其他相關文章!