我正在尝试创建一个带有tkinter的GUI,其中包含几个复选框。与这些复选框相关联的变量应该存储在一个公共字典中(参见下面的示例)。到目前为止,我的代码的问题是,当只单击其中一个复选框时,所有复选框都会同时更新,并且字典中的值不会更新。
import tkinter as tk
config = {"option0": False, "option1": False}
root = tk.Tk()
def print_values():
print(config["option0"])
print(config["option1"])
chk_option0 = tk.Checkbutton(master=root, text='option0', variable=config["option0"], onvalue=True, offvalue=False)
chk_option0.grid(row=0, column=0, sticky = "W")
chk_option1 = tk.Checkbutton(master=root, text='option1', variable=config["option1"], onvalue=True, offvalue=False)
chk_option1.grid(row=1, column=0, sticky = "W")
btn_Print = tk.Button(master=root, text="Print values", command=lambda : print_values())
btn_Print.grid(row=2, column=0, sticky = "W")
root.mainloop()
发布于 2021-04-07 09:00:39
对于config
字典的值,应该使用BooleanVar()
而不是False
:
import tkinter as tk
root = tk.Tk()
config = {"option0": tk.BooleanVar(), "option1": tk.BooleanVar()}
def print_values():
print(config["option0"].get())
print(config["option1"].get())
chk_option0 = tk.Checkbutton(master=root, text='option0', variable=config["option0"], onvalue=True, offvalue=False)
chk_option0.grid(row=0, column=0, sticky = "W")
chk_option1 = tk.Checkbutton(master=root, text='option1', variable=config["option1"], onvalue=True, offvalue=False)
chk_option1.grid(row=1, column=0, sticky = "W")
btn_Print = tk.Button(master=root, text="Print values", command=lambda : print_values())
btn_Print.grid(row=2, column=0, sticky = "W")
root.mainloop()
发布于 2021-04-07 09:02:16
如果您想要存储复选框的输出,则必须使用BooleanVar()
初始化变量。(同样,如果分别使用int和string设置OFF值和ON值,则IntVar()
和StringVar()
也存在)。最后,您必须使用.get()
函数来获取存储在其中的值。
import tkinter as tk
config = {"option0": False, "option1": False}
root = tk.Tk()
def print_values():
print(config["option0"].get())
print(config["option1"].get())
config["option0"] = tk.BooleanVar()
config["option1"] = tk.BooleanVar()
chk_option0 = tk.Checkbutton(master=root, text='option0', variable=config["option0"], onvalue=True, offvalue=False)
chk_option0.grid(row=0, column=0, sticky = "W")
chk_option1 = tk.Checkbutton(master=root, text='option1', variable=config["option1"], onvalue=True, offvalue=False)
chk_option1.grid(row=1, column=0, sticky = "W")
btn_Print = tk.Button(master=root, text="Print values", command=lambda : print_values())
btn_Print.grid(row=2, column=0, sticky = "W")
root.mainloop()
https://stackoverflow.com/questions/66982520
复制