我尝试创建一个类来生成一批按钮(4)。 我希望按下每个按钮的统计数据 - 当我按下每个按钮时,只返回最后一个按钮的状态(4)
status
是为了更改按钮的状态而不按下它(按下模拟按钮的自动过程)
我做错了什么?
class dev_buttons2(object):
def __init__(self,master,buts_list):
self.status=[]
for i in range(len(buts_list)):
self.var = IntVar()
self.name=buts_list[i]
self.c = Checkbutton(master,text=buts_list[i], variable=self.var,
indicatoron=0,command=self.cb,width=10,height=2)
self.c.grid(column=i, padx=5,row = 10)
self.status.append(self.var)
def cb(self):
#device_chage_state(devices_headers.index(self.name),self.status[i].get() )
print(self.status[0].get())
pass
def stat():
return self.status
答案 0 :(得分:0)
搜索答案产生lambda
的使用。
使用它可以传递一个参数,这是好,但我需要传递两个参数,而lambda`不能这样做。
我使用的解决方法是使用buts_list[i]
将参数var
(按钮名称)和lambda
(按钮的开/关值)作为列表传递运行cp
,将它们分成change_device_state
函数中的2个参数。
class dev_buttons2(object):
def __init__(self,master,buts_list):
self.status=[]
self.buts=[]
for i in range(len(buts_list)):
var = StringVar()
c = Checkbutton(master,text=buts_list[i], variable=var,
indicatoron=0,command=lambda arg=[buts_list[i],var]:
self.cb(arg),width=10,height=2,onvalue="on",offvalue="off")
c.grid(column=i, padx=5,row = 10)
var.set("off")
self.status.append(var)
self.buts.append(c)
def cb(self,but):
device_chage_state(devices_headers.index(but[0]),but[1].get())