【问题标题】:Python Form: Using TKinter --> run script based on checked checkboxes in GUIPython 表单:使用 TKinter --> 基于 GUI 中选中的复选框运行脚本
【发布时间】:2017-05-25 04:56:37
【问题描述】:

我使用 tkinter(见图)在 Python 3.5 中创建了以下复选框弹出窗口,代码如下:

    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)

    if __name__ == '__main__':
       root = Tk()
       lng = Checkbar(root, ['DerVar1', 'DerVar2', 'DerVar3', 'DerVar4', 'DerVar5', 'DerVar6', 'DerVar7', 'DerVar8'])
       tgl = Checkbar(root, ['DerVar9','DerVar10', 'DerVar11', 'DerVar12', 'DerVar13', 'DerVar14'])
       lng.pack(side=TOP,  fill=X)
       tgl.pack(side=LEFT)
       lng.config(relief=GROOVE, bd=2)

   def allstates(): 
      print(list(lng.state()), list(tgl.state()))
   Button(root, text='Quit', command=root.quit).pack(side=RIGHT)
   Button(root, text='Run', command=allstates).pack(side=RIGHT)
   root.mainloop()  

如您所见,我检查了“DerVar2”和“DerVar3”。单击运行后,我会以黄色突出显示以下内容。

如您所见,1 对应于选中的复选框。

变量 'lng' 是一个检查栏对象。我想说如果'DerVar2'被选中,然后打印'test'但不能让它工作。

这是我尝试过的代码,下面是我得到的错误:

if lng[1] == 1:
    print ('test')

TypeError: 无法将 'int' 对象隐式转换为 str

【问题讨论】:

    标签: python user-interface input tkinter interface


    【解决方案1】:

    问题是你的Checkbar 类没有__getitem__ 方法所以lng[1] 会触发错误。要做到lng[1] == 1 没有错误,只需将以下方法添加到您的 rCheckbar 类:

    def __getitem__(self, key):
        return self.vars[key].get()
    

    这样lng[i] 将返回Checkbar 的第i 个IntVar 的值

    【讨论】:

      【解决方案2】:

      您需要显式强制转换为相同的类型以进行比较。试试这个:

       if int(lng[1]) == 1:
          print ('test')
      

      if lng[1] == str(1):
          print ('test')
      

      【讨论】:

      • 感谢您的快速响应;当我尝试上面列出的任一选项时,我得到了同样的错误。错误是:TypeError: Can't convert 'int' object to str implicitly
      • 是的 - 你的 Checkbar 类有问题 - 如上所述添加 get_item 方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 2013-09-20
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 2015-11-26
      • 2014-09-16
      相关资源
      最近更新 更多