1. 程式人生 > >Checkbutton多選功能

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元件等,獲取元件中每一個物件的資訊,也都可以使用上述方法獲取各元件資訊。