2013-12-21 52 views
3

我正在寫一個程序,它顯示一個按鈕的網格,當按下按鈕時我希望它打印網格中按鈕的位置(「行列」 )輸出到控制檯。以下是我有Python Tkinter,設置循環的按鈕回調函數

import Tkinter as tk 

class board(tk.Tk): 
    def __init__(self, parent=None): 
     tk.Tk.__init__(self,parent) 
     self.rows = 5 
     self.columns = 5 
     self.init_board() 

    def init_board(self): 
     for i in range(self.rows): 
      for j in range(self.columns): 
       cmd = lambda: self.button_callback(i,j) 
       b = tk.Button(self, text=str(" "), command=cmd) 
       b.grid(row=i, column=j) 

    def button_callback(self, row, col): 
     print(str(row) + " " + str(col)) 


if __name__ == '__main__': 
    board().mainloop() 

的問題是,當我點擊任何按鈕,我得到「4 4」打印出來,這是在環實例化的最後一個按鈕的位置。我不知道爲什麼會發生這種情況,請幫忙!

回答

6

在功能使用lambdai創建,j是指在init_board功能varaible,這在本for循環結束後設置爲4,4。

您可以使用默認參數解決此問題。


替換以下行:

cmd = lambda: self.button_callback(i,j) 

有:

cmd = lambda i=i, j=j: self.button_callback(i,j) 
+0

這工作,謝謝! – user3124924

+0

@ user3124924,歡迎來到Stack Overflow!由於您是新手,您可能需要查看[此鏈接](http://meta.stackexchange.com/a/5235)。 – falsetru