Checkbutton多选功能

在tkinter中,会经常用到Checkbutton 或者 Radiobutton 实现多选功能(单选功能一般用Listbox)。很多文章都是粗略的说了怎么实现多选选中的效果,却没有指出如何确定哪些被选中了。

当只创建一个Checkbutton时候:

v = IntVar()
Checkbutton(master=self.master, variable=v, text=text, height=2, width=10, anchor=W)\
                .grid(padx=5, pady=5, ipadx=5, ipady=5, sticky=W)

要取对象是否选中,可直接通过v.get()方法获取值判断;但若有N个Checkbutton时候,如果仍这样的处理方式,你通过v.get()获取的值永远是最后一个Checkbutton的值。原因是变量v被覆盖了。所以要做一个迂回操作,先将v对象信息,保存下来,当选好后,再获取每个对象的值判断是否被选中。

代码如下:

from tkinter import *
from tkinter import messagebox

class Win_Program:
    def __init__(self):
        self.master = Tk()
        self.master.state("zoomed") # 窗口最大化
        self.master.title("demo")
        self.master.grid()
        self.check_buttons = list()

    def create_check_buttons(self, num):
        while num:
            # 设置一个变量
            v = IntVar()
            text = "checkbutton" + str(num)
            Checkbutton(master=self.master, variable=v, text=text, height=2, width=10, anchor=W)\
                .grid(padx=5, pady=5, ipadx=5, ipady=5, sticky=W)
            # 设置选项默认不选中
            v.set(0)
            # 将每个选项的对象信息存放在一个列表中
            self.check_buttons.append([v, text])
            num -= 1
        Button(master=self.master, text="选好了", command=self.get_checked_buttons).grid()

    def get_checked_buttons(self):
        checked = ""
        for each in self.check_buttons:
            if each[0].get() == 1:
                checked += each[1] + "  "
        messagebox.showinfo(title="选中项", message=checked)

if __name__ == "__main__":
    win_program = Win_Program()
    win_program.create_check_buttons(10)
    mainloop()

上述方法是通用的,如果使用的是Radiobutton组件、Entry组件等,获取组件中每一个对象的信息,也都可以使用上述方法获取各组件信息。

猜你喜欢

转载自blog.csdn.net/ck3207/article/details/81050850