我正在尝试创建一个有弹性的按钮网格,按下时会改变颜色。使用 tkinter 创建网格,我认为我在调用正确的根或格式时遇到了问题。创建调整大小网格不是问题,但是让代码对函数做出反应会给我带来问题。
任何朝着正确方向的推动都将不胜感激。
from tkinter import *
gx = 4
gy = 4
class trisector:
def __init__(self, master): #starts the index and root of function
Grid.rowconfigure(master, 0, weight=1) #
Grid.columnconfigure(master, 0, weight=1)
frame=Frame(master)
frame.grid(row=0,column=0,sticky=N+S+E+W)
for x in range(gx):
Grid.rowconfigure(frame, x , weight=1)
for y in range(gy):
Grid.columnconfigure(frame, y, weight=1)
self.btn = Button(frame, command=lambda widget=self.btn:
self.color_change(widget))
self.btn.grid(row=x, column=y, sticky=N+E+W+S)
self.btn.position=(x,y)
def color_change(self,widget):
x,y = widget.position
print("Changing", (x,y))
swidget.configure(bg="red")
root = Tk()
bob = trisector(root)
root.mainloop()
首先,
您需要将command
的分配拆分为 self.btn
,因为您正在尝试传递按钮本身的实例:
self.btn = Button(frame)
self.btn['command'] = lambda widget=self.btn: self.color_change(widget)
然后修复color_change()
中的错别字:
def color_change(self,widget):
x,y = widget.position
print("Changing", (x,y))
widget.configure(bg="red") # <-- change swidget to widget