哪个检查按钮已经过检查

时间:2017-02-17 08:16:59

标签: python-3.x checkbox tkinter

我创建了一个复选框。我希望程序打印' python'当我在创建的复选框中勾选它。 但它不起作用......我没有得到错误,但它没有打印出来的蟒蛇' 请帮忙。 这是我的代码

#!/usr/bin/python3

from tkinter import *
class Checkbar(Frame):
   def __init__(self, parent=None, picks=[], side=LEFT, anchor=W):
      Frame.__init__(self, parent)
      self.vars = []
      for pick in picks:
         var = IntVar()
         chk = Checkbutton(self, text=pick, variable=var)
         chk.pack(side=side, anchor=anchor, expand=YES)
         self.vars.append(var)
   def state(self):
      return map((lambda var: var.get()), self.vars)
   def __getitem__(self,key):
        return self.vars[key]


if __name__ == '__main__':
   root = Tk()
   lng = Checkbar(root, ['Python', 'Ruby', 'Perl', 'C++'])
   tgl = Checkbar(root, ['English','German'])
   lng.pack(side=TOP,  fill=X)
   tgl.pack(side=LEFT)
   lng.config(relief=GROOVE, bd=2)


   def allstates(): 

##      print(lng[0])

      if lng[0] == 1:
         print ('python')


   Button(root, text='Quit', command=root.quit).pack(side=RIGHT)
   Button(root, text='Peek', command=allstates).pack(side=RIGHT)
   root.mainloop()

1 个答案:

答案 0 :(得分:0)

lng[0]IntVar,而不是int,因此它永远不会等于一。

您需要使用get方法将变量的值与1:

进行比较
def allstates(): 
    if lng[0].get() == 1:
        print ('python')

另一个解决方案是更改__getitem__的{​​{1}}方法,以便它返回变量的值而不是变量本身,正如我在回答Python Form: Using TKinter --> run script based on checked checkboxes in GUI

Checkbar

在这种情况下,您不必更改def __getitem__(self, key): return self.vars[key].get() 功能。