Checkbutton多選功能
阿新 • • 發佈:2018-11-30
在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()
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元件等,獲取元件中每一個物件的資訊,也都可以使用上述方法獲取各元件資訊。