python - 如何在循环中定义 Tkinter 检查按钮?
问题描述
我正在努力在循环中定义检查按钮。下面,我用 2 个版本编写了我的实际代码的非常简化的表示。版本 1 工作正常。但是,我想在我的项目中使用的版本 2(带有循环)不起作用。它仅适用于行中的最后一项。我不明白为什么这是因为检查 varlist 的值会发现其中的 IntVar 已定义和设置,请参阅注释“# 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(), tk.IntVar()
var5, var6, var7, var8 = tk.IntVar(), tk.IntVar(), 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()
解决方案
推荐阅读
- python - 如何正确安装 PyGObject?(OSX)
- javascript - 如何将本地 JS 文件中的数据附加到 ReactJS 中的状态?
- c# - “服务器违反了协议。Section=ResponseStatusLine” - 没有发送请求
- woocommerce - 达到免运费金额后如何设置免运费
- javascript - 如何将字符串添加到数组并返回字符串
- angular - Angular:无法使用@Input第二次重置子组件中的值
- typo3 - TYPO3 服务不可用 (503)
- c++ - hiredis 消息未到达订阅的处理程序
- node.js - 我想在 puppeteer-cluster 中创建无限循环
- python - 为什么 Elif 在一些列表输入后打印?