#!python # -*- mode: python; Encoding: utf-8; coding: utf-8 -*- # Last updated: <2022/12/04 21:19:15 +0900> """ Test tkinter.Checkbutton Windows10 x64 22H2 + Python 3.9.13 64bit """ import tkinter as tk from functools import partial CHK_LIST = [ ["Apple", True], ["Orange", True], ["Lemon", False], ["Peach", False], ["Banana", True], ["strawberry", True], ] class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.master.title("Test Checkbutton") self.master.geometry("400x400") # create Label self.msg = tk.StringVar() self.msg.set("Message") lbl = tk.Label(self.master, textvariable=self.msg, borderwidth=2, relief="ridge", font=("Arial", "18", "normal") ) # create Button button = tk.Button(self.master, text="Toggle", command=self.click_button) # create Checkbuttons self.cb_values = [] self.cbs = [] for i, d in enumerate(CHK_LIST): def_text, def_value = d # reserve Checkbutton value self.cb_values.append(tk.BooleanVar(value=def_value)) # create Checkbutton cb = tk.Checkbutton(self.master, text=def_text, variable=self.cb_values[i], command=lambda i=i: self.click_cb(i), # command = partial(self.click_cb, i), # command = self.click_cb(i), ) self.cbs.append(cb) self.cbs[i].pack() lbl.pack() button.pack() def click_cb(self, n): """Click Checkbutton.""" name = self.cbs[n].cget("text") value = self.cb_values[n].get() self.msg.set(f"{name} (id={n}) is {value}") def click_button(self): """Toggle Checkbuttons value.""" for cb in self.cb_values: if True: v = cb.get() cb.set(not v) else: cb.toggle() def main(): root = tk.Tk() app = Application(master=root) app.mainloop() if __name__ == '__main__': main()