Python 获取数组中的复选框状态-Tkinter
我在不到3周前刚开始编写代码(在Lynda上过一门课),现在正在开发一个GUI,它允许用户勾选/取消勾选列表。我设法把它完成了,但工作效率低下(有人给了我一个提示) 我所做的基本上是为每个复选框调用一个变量,并将复选框状态插入其中。因此,如果列表中有100个复选框,则需要创建100个变量。下面是我编写的工作代码Python 获取数组中的复选框状态-Tkinter,python,tkinter,checkbox,Python,Tkinter,Checkbox,我在不到3周前刚开始编写代码(在Lynda上过一门课),现在正在开发一个GUI,它允许用户勾选/取消勾选列表。我设法把它完成了,但工作效率低下(有人给了我一个提示) 我所做的基本上是为每个复选框调用一个变量,并将复选框状态插入其中。因此,如果列表中有100个复选框,则需要创建100个变量。下面是我编写的工作代码 import tkinter as tk from tkinter import ttk root = tk.Tk() var1t1 = tk.IntVar() var2t1 = t
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
var1t1 = tk.IntVar()
var2t1 = tk.IntVar()
var3t1 = tk.IntVar()
var_name = []
root.title("Testing Checkbox")
root.geometry("200x150")
def boxstates_t1():
var_name = [var1t1.get(), var2t1.get(), var3t1.get()]
print(var_name)
# -----------------Checkbox-----------------
labelName = tk.Label(root, text = "Name")
labelName.pack(anchor = tk.W)
check1_t1 = ttk.Checkbutton(root, text = "Mike", variable = var1t1)
check1_t1.pack(anchor = tk.W)
check2_t1 = ttk.Checkbutton(root, text = "Harry", variable = var2t1)
check2_t1.pack(anchor = tk.W)
check3_t1 = ttk.Checkbutton(root, text = "Siti", variable = var3t1)
check3_t1.pack(anchor = tk.W)
# -----------------Button-----------------
btn2 = ttk.Button(root, text="Show", command = boxstates_t1)
btn2.pack(side=tk.RIGHT)
root.mainloop()
然后我搜索了一下,发现很少有代码可以让我使用for循环来打印列表。我初始化var\u name=[]
以便它从列表中捕获每个复选框状态
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
var1 = tk.IntVar()
var_name = []
root.title("Testing Checkbox")
root.geometry("200x150")
def boxstates():
var_name = var1.get()
print(var_name)
# ------------------Chekbox-------------
name1 = ["Mike", "Harry", "Siti"]
labelName = tk.Label(root, text = "Name")
labelName.pack(anchor = tk.W)
for checkboxname in name1:
check1_t1 = ttk.Checkbutton(root, text=checkboxname, variable=var1)
check1_t1.pack(anchor = tk.W)
# ------------------Button-------------
btn2 = ttk.Button(root, text="Show", command = boxstates)
btn2.pack(side=tk.RIGHT)
root.mainloop()
但我无法单独勾选复选框,打印结果也会返回,就好像它是在单个变量中一样。我是否错误地使用数组var\u name=[]
?我现在迷路了,不知道下一步该去哪里
任何建议都将不胜感激。试试以下方法:
import tkinter as tk
from tkinter import ttk
def boxstates():
finalValue = []
for x in checkboxList:
finalValue.append(x.get())
print(finalValue)
root = tk.Tk()
root.title("Testing Checkbox")
root.geometry("200x150")
# ------------------Chekbox-------------
checkboxList = [tk.IntVar(), tk.IntVar(), tk.IntVar()] # if you want to add more you can either append to it or declare it before runtime
name1 = ["Mike", "Harry", "Siti"]
labelName = tk.Label(root, text = "Name")
labelName.pack(anchor = tk.W)
def createCheckboxes():
for x, y in zip (checkboxList, name1):
check1_t1 = ttk.Checkbutton(root, text=y, variable=x)
check1_t1.pack(anchor = tk.W)
# ------------------Button-------------
btn2 = ttk.Button(root, text="Show", command = boxstates)
btn2.pack(side=tk.RIGHT)
createCheckboxes()
root.mainloop()
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Testing Checkbox")
root.geometry("200x150")
def boxstates():
for var in vars:
print (var.get())
names = ["Mike", "Harry", "Siti"]
labelName = tk.Label(root, text = "Name")
labelName.pack(anchor = tk.W)
vars = []
for i, checkboxname in enumerate(names):
vars.append(tk.IntVar())
check = ttk.Checkbutton(root, text=checkboxname, variable=vars[i])
check.pack(anchor = tk.W)
btn = ttk.Button(root, text="Show", command = boxstates)
btn.pack(side=tk.RIGHT)
root.mainloop()
嗨,谢谢你的意见。但是从您修改的代码中,gui将所有名称打印为“Harry”,并添加所有boxstate值,而不是将它们放入数组中。我很抱歉。我误读了这个问题,现在我想我已经解决了。如果您有任何问题,您可以评论againIt works。非常感谢@Breno向我介绍zip函数。只是第25行中的一个问题,“y”变量用“checkboxList”和“name1”压缩。但是它不会打印出checkboxList,是不是因为数组中没有任何字符串?zip函数的工作原理是这样的:您可以将任意多个列表压缩在一起,对于压缩的每个列表,如果您希望在压缩时访问它,您可以为其分配一个变量。在本例中,我正在执行“for x,y In zip(checkboxList,name1):”,因此x变量包含checkboxList的所有值,y变量包含name1列表的所有值。它们按照zip函数的顺序包含列表的值-x是第一个变量,因此包含zip中第一个列表的值,即checkboxList,依此类推。。。不客气:我知道,我认为x是数组的计数器,而y是checkboxList和name1的变量。谢谢你的进一步解释。这对我很有帮助。谢谢你,成功了。请允许我问一下,在第19行中,复选框将根据枚举函数打印名称,而I作为数组的计数器?是的,计数器变量“I”覆盖“names”中的项目范围,因此它采用值0、1和2。如果选中相应的项,“get”函数将返回1,否则返回0。