tkinter按钮的类 - 如何返回其值?

时间:2017-07-13 07:06:10

标签: python tkinter

我尝试创建一个类来生成一批按钮(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

1 个答案:

答案 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())