tkinter中的checkbutton不会将值存储到变量中

时间:2018-02-10 01:31:31

标签: python python-3.x tkinter ttk

我刚刚在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是否已选中或未选中。查看示例和文档也是一个死胡同。为什么我的变量仍然是空的?

1 个答案:

答案 0 :(得分:1)

替换:

print(spam.get())

使用:

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

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

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

spam = StringVar()

与:

相同
spam = StringVar(value="")

checkbutton最初是默认的on-on,nor-off状态(因为spam既不是off也不是on值),但很难注意到版本(如果有的话),替换:

checkbutton = ttk.Checkbutton(...

使用:

checkbutton = Checkbutton(...

使用中的默认检查按钮,显示更加鲜明。

另请注意,Checkbutton需要用于呼叫spam.set(checkbutton['onvalue'])spam.set(checkbutton['offvalue'])