我正在编写一个显示按钮网格的程序,当按下按钮时,我希望它将网格中按钮的位置(“行列”)打印到控制台。这是我所拥有的
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”,这是循环中实例化的最后一个按钮的位置。我不知道为什么会出现这种情况,请帮忙!
在使用创建的函数中lambda
, i
, j
指的是变量init_board
函数,在之后设置为 4, 4for
循环结束。
您可以使用默认参数解决此问题。
替换以下行:
cmd = lambda: self.button_callback(i,j)
with:
cmd = lambda i=i, j=j: self.button_callback(i,j)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)