我在python shell中做了这个:
from Tkinter import *
v = BooleanVar()
但我收到以下错误:
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
v = BooleanVar()
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 320, in __init__
Variable.__init__(self, master, value, name)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 185, in __init__
self._tk = master.tk
AttributeError: 'NoneType' object has no attribute 'tk'
>>>
然后在尝试使其工作时,我尝试了这个:
v = BooleanVar
这很有效 .
所以我继续做下一个合乎逻辑的事情,检查变量是否已经初始化并得到了这个:
>>> v
<class Tkinter.BooleanVar at 0xb6f666bc>
然后我尝试使用值 True
进行初始化,为此我使用了 set
方法:
v.set(True)
我得到了以下错误:
Traceback (most recent call last):
File "<pyshell#63>", line 1, in <module>
v.set(True)
TypeError: unbound method set() must be called with BooleanVar instance as first argument (got bool instance instead)
What 正在进行中?
Please 帮我解决这个问题
Goal 我想将此作为与菜单中的复选按钮关联的变量
specs Linux mint 14,python 2.7,Tkinter 8.5
1 回答
简短回答:首先致电
root = tk.Tk()
.答案很长:提出错误的那一行,
失败是因为
master
是None
. 但是,请查看此行上方的代码(在Tkinter.py中):如果您将
master
窗口小部件显式传递给BooleanVar
(Variable
的子类),那么master
将不会None
. 或者,如果_default_root
不是None
,那么master
将不是None
.在普通的Tkinter应用程序中,您将在创建
BooleanVar
之前创建一个根窗口 . 在这种情况下,tk.BooleanVar()
不会引发错误 .root = tk.Tk()
将_default_root
全局变量设置为自身(只要useTk
参数为True
- 默认为True
) . 如果没有使用tk.BooleanVar(master)
显式设置master,BooleanVar
将_default_root
用作窗口小部件的主设备 .总而言之,要么在调用
tk.BooleanVar()
之前调用root = tk.Tk()
或类似的东西来设置_default_root
,要么将显式主窗口小部件作为第一个参数传递:tk.BooleanVar(master)
.