如何使用Python将按钮数组链接到变量数组?

问题描述 投票:0回答:1

我正在尝试制作多行按钮和变量,当您单击一行中的按钮时,它会更改同一行中的变量。但是我不知道如何将按钮和变量连接在一起。

我尝试过使用 lambda、附加变量,我实现的最接近的结果是通过单击任何按钮将所有变量更改一定数量,但这不是我想要的。

这是我的代码:

rows = 100
m = []
bt = list()

def popo():
    for i in range(rows):
        m.append(0)
        count = lambda x: x+1
        w = Button(master, text = "Act", command = count(m[i]))
        w.grid(row = i % 40, column = (i // 40) * 6, sticky = W, pady = 2)
        bt.append(w)
        print(m[i])

        l1 = Label(master, text = m[i])        
        l1.grid(row = i % 40, column = (i // 40) * 6 + 1, sticky = W, pady = 2)

b1 = Button(master, text = "Act", command = popo)
b1.grid(row = 0, column = 0, sticky = W, pady = 2)

每当我单击列表中的任何按钮时,它都不会更改变量,当然也不会执行任何操作。

python tkinter widget tkinter-button
1个回答
0
投票

请注意,

command=count(m[i])
将立即执行
count(m[i])
并将结果(即1)分配给
command
选项。

m[i]
更新时,关联的标签也不会自动更新。

建议:

  • m
    改为
    IntVar()
    列表
  • 创建关联标签时使用
    textvariable
    选项

以下是更新后的

popo()
:

def popo():
    for i in range(rows):
        # create an instance of IntVar() and append to list m
        m.append(IntVar())
        # lambda to increase the variable by 1
        count = lambda x=i: m[x].set(m[x].get()+1)
        w = Button(master, text = "Act", command = count) # assign the lambda to command
        w.grid(row = i % 40, column = (i // 40) * 6, sticky = W, pady = 2)
        bt.append(w)
        print(m[i].get())

        l1 = Label(master, textvariable = m[-1]) # used textvariable instead
        l1.grid(row = i % 40, column = (i // 40) * 6 + 1, sticky = W, pady = 2)

那么当对应的

IntVar
更新时,关联的标签也会自动更新。

© www.soinside.com 2019 - 2024. All rights reserved.