如何在类中正确使用和定义属性. tkinter 按钮的粘性网格,可单独对函数做出反应



我正在尝试创建一个有弹性的按钮网格,按下时会改变颜色。使用 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

相关内容

最新更新