User interface Python中的“复选框”复选框

User interface Python中的“复选框”复选框,user-interface,python-2.7,python-3.x,tkinter,User Interface,Python 2.7,Python 3.x,Tkinter,使用python和tkinter,我有一个应用程序可以动态地创建40个左右的复选框,我想在它们前面添加一个可以选中所有复选框的应用程序 这方面的一个例子是电子邮件。。。当您想删除大量电子邮件时,可以选中“全选”复选框 我的问题是如何将此功能添加到python GUI应用程序中。我认为这与chk_btn.configstate=有关,但我不确定 感谢您的帮助 动态创建复选框通常不是一个好主意。这可能会导致一些问题,例如丢失按钮的轨迹。但是,我编写的这个小脚本应该演示如何做您想要做的事情: from

使用python和tkinter,我有一个应用程序可以动态地创建40个左右的复选框,我想在它们前面添加一个可以选中所有复选框的应用程序

这方面的一个例子是电子邮件。。。当您想删除大量电子邮件时,可以选中“全选”复选框

我的问题是如何将此功能添加到python GUI应用程序中。我认为这与chk_btn.configstate=有关,但我不确定


感谢您的帮助

动态创建复选框通常不是一个好主意。这可能会导致一些问题,例如丢失按钮的轨迹。但是,我编写的这个小脚本应该演示如何做您想要做的事情:

from Tkinter import *

root = Tk()

# Create a dictionary where the keys are the checkbuttons
# and the values are their BooleanVars
buttons = dict()
for _ in xrange(10):
    buttons[Checkbutton(root)] = BooleanVar()

for button in buttons:
    # Place each button on the window
    button.grid()
    # Hook each button up to its BooleanVar
    button.config(variable=buttons[button])
    # Set each BooleanVar to True
    buttons[button].set(True)

# I printed this just to show what is going on
print buttons

root.mainloop()

让我不至于忘记这些按钮的是我用来存储它们和它们的布尔值的字典。如果您想访问按钮或其变量,可以在该词典中找到它。

对于任何感兴趣的人-忽略我得到的答案,请使用以下命令:

from tkinter import *
root = Tk()
frame = Frame(root).grid()

class state:
    def read_states():
        arry = list(map(lambda var: var.get(), states))
        for n in range(len(arry)):
            print(arry[n])
        print('----')
    def change_states(x):
        for n in range(len(folder1)):
            x[n].set(1)
    def clear_states():
        for n in range(len(states)):
            states[n].set(0)
states = []
bgs = []
folder1 = []
folder2 = []
folder_break = []
for n in range(10):
    var = IntVar()
    chk = Checkbutton(frame, text=n+1, variable=var)
    chk.grid(row=n+3)
    if n < 5:
        folder1.append(var)
    else:
        folder2.append(var)
    states.append(var)


btn_2 = Button(frame, text='Change', command=lambda w=folder1: state.change_states(w))
btn_2.grid(row=1)
btn_3 = Button(frame, text='Change2', command=lambda w=folder2: state.change_states(w))
btn_3.grid(row=1, column=1)
btn_4 = Button(frame, text='Clear', command=state.clear_states)
btn_4.grid(row=2)
btn = Button(frame, text='GO', command=state.read_states)
btn.grid(row=0)

root.mainloop()
这给了我更多的自由和控制,并受到了第一个答案的启发


再次感谢:

以下是我如何使用复选按钮选择/取消选择所有复选框来解决此问题的:

import Tkinter as tk

def select_clear_states():
    global Vars, all_states
    states = all_states.get()

    if states == 0:
        for i in range(len(Vars)):
            Vars[i].set(0)
    if states == 1:
        for i in range(len(Vars)):
            Vars[i].set(1)

Vars = []

root = tk.Tk()

all_states = tk.IntVar()
select_all = tk.Checkbutton(root, text = "select/deselect all", 
                            variable = all_states, command = select_clear_states)
select_all.grid(row = 0, column = 0, padx = 5, pady = 1)

for n in range(10):

    var = tk.IntVar()
    Vars.append(var)
    checkbox = tk.Checkbutton(root, text = n+1, variable= Vars[n])
    checkbox.grid(row = n+1, column = 0, padx = 5, pady = 1)     

root.mainloop()

我知道使用全局变量不是很干净,但我现在懒得使用OOP

我认为这里的关键部分是按钮[button]。设置为True是否也会更改分配给检查按钮的变量?@DCA-对两条语句都是。buttons[button]生成与button一起使用的变量BooleanVar。我使字典的键成为按钮实例,值成为相应的布尔变量。