tkinter 中的复选按钮未将值存储到变量中

Checkbutton in tkinter is not storing values into variables

我刚刚开始使用 tkinter,我一直在试图弄清楚为什么这段代码不起作用:

from tkinter import *
from tkinter import ttk

root = Tk()
spam = StringVar()
checkbutton = ttk.Checkbutton(
    root, text="SPAM?", variable=spam, onvalue="Yes, SPAM!", offvalue="Boo, SPAM!")
checkbutton.pack()
print(spam.get())

root.mainloop()

变量spam是空的,无论我的checkbutton是选中还是未选中。查看示例和文档也是死路一条。为什么我的变量还是空的?

替换:

print(spam.get())

与:

checkbutton['command'] = lambda arg=spam: print(arg.get())

为了查看变量确实存储了值。


问题是当您的 print 被调用时 spam.get() 等于 "" 为:

spam = StringVar()

等同于:

spam = StringVar(value="")

checkbutton 最初处于默认的既不开启也不关闭状态(因为 spam 既不是关闭也不是开启值),但很难注意到 版本(如果有的话),替换:

checkbutton = ttk.Checkbutton(...

与:

checkbutton = Checkbutton(...

使用中的默认Checkbutton,它的显示更加鲜明。

另请注意,需要使用 Checkbutton 才能调用 spam.set(checkbutton['onvalue'])spam.set(checkbutton['offvalue'])