我正在创建一个按钮网格,然后尝试在使用tkinter单击该按钮时查找按钮的位置。但是,运行代码时,tkinter会抛出TypeError
,但我不确定它所引用的行。我相信有问题的区域如下所示,但是如果需要的话,我可以张贴我写的所有内容。
def createbuttongrid(self):
label = 1
for row in range(8):
for column in range(12):
button = tk.Button(self.button_frame, text='Well %s' % label, command=lambda r=row, c=column:self.colorbuttons)
button.bind("<ButtonPress-1>", self.colorbuttons)
self.button_list[button] = (row, column)
button.grid(row=row, column=column, sticky='nsew')
label += 1
def colorbuttons(self, r, c):
row = r
column = c
print("Row: %s\nColumn: %s" % (row, column))
我得到的错误在下面
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\[MY_NAME]\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
TypeError: colorbuttons() missing 1 required positional argument: 'c'
这两个函数都在一个类中,包括一个__init__
,用于在需要时生成和设置主窗口。
感谢您的帮助!
编辑
我最终在下游进行了一些更改,最后得到了以下内容
def createbuttongrid(self):
label = 1
for row in range(8):
for column in range(12):
button = tk.Button(self.button_frame, text='Well %s' % label)
button.bind("<Button-1>", self.colorbuttons)
button.grid(row=row, column=column, sticky='nsew')
self.button_list[button] = (row, column)
label += 1
def colorbuttons(self, event):
button = event.widget
print(button, self.button_list[button])
使用它,可以获得网格中按钮的行和列(这是我最终追求的,也许可以更早地指定)。非常感谢两位在这里发表评论的人,这些评论最终为我指明了正确的方向。