如何在循环中定义 Tkinter 复选按钮?

问题描述

我正在努力在循环中定义复选按钮。下面,我用 2 个版本编写了我的实际代码的非常简化的表示。版本 1 工作正常。但是,我想在我的项目中使用的版本 2(带循环)不起作用。它仅适用于行中的最后一项。我不明白为什么这是因为检查 varlist 的值显示其中的 Intvars 已定义和设置,请参阅注释“#CHECKING”。我还尝试了一个带有 Intvars 字典的版本,但这也不起作用。我希望有人能解释一下版本 2 有什么问题。非常感谢。

import tkinter as tk

def state(var):
   if var.get():
      val = var.get()
      print(val)

root = tk.Tk()

# VERSION 1
var1,var2,var3,var4 = tk.Intvar(),tk.Intvar(),tk.Intvar()
var5,var6,var7,var8 = tk.Intvar(),tk.Intvar()
var1.set(0),var2.set(0),var3.set(0),var4.set(0)
var5.set(0),var6.set(0),var7.set(0),var8.set(0)

tk.Label(root,text = 'Version 1,Choose:').pack()
tk.Checkbutton(root,text = 'item1',variable = var1,command = lambda: state(var1)).pack()
tk.Checkbutton(root,text = 'item2',variable = var2,command = lambda: state(var2)).pack()
tk.Checkbutton(root,text = 'item3',variable = var3,command = lambda: state(var3)).pack()
tk.Checkbutton(root,text = 'item4',variable = var4,command = lambda: state(var4)).pack()
tk.Checkbutton(root,text = 'item5',variable = var5,command = lambda: state(var5)).pack()
tk.Checkbutton(root,text = 'item6',variable = var6,command = lambda: state(var6)).pack()
tk.Checkbutton(root,text = 'item7',variable = var7,command = lambda: state(var7)).pack()
tk.Checkbutton(root,text = 'item8',variable = var8,command = lambda: state(var8)).pack()

# VERSION 2
tk.Label(root,text = '').pack()
tk.Label(root,text = 'Version 2,Choose:').pack()
varlist =[]
itemlist = ['item1','item2','item3','item4','item5','item6','item7','item8']
for item in itemlist:
   var = tk.Intvar()
   var.set(0)
   varlist.append(var)   
   tk.Checkbutton(root,text = item,variable = var,command = lambda: state(var)).pack()
   print(var,var.get()) # CHECKING     
root.mainloop()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...