Python TKinter 8.5中的布尔变量

Python TKinter 8.5中的布尔变量,python,tkinter,Python,Tkinter,我在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 __i

我在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'
>>> 
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)
这起作用了

因此,我继续做下一个合乎逻辑的事情,检查变量是否已初始化,并得到以下结果:

>>> v
<class Tkinter.BooleanVar at 0xb6f666bc>
为此,我得到了以下错误:

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'
>>> 
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)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
v、 设置(真)
TypeError:必须使用BooleanVar实例作为第一个参数调用unbound method set()(改为使用bool实例)
发生了什么事

请帮我解决这个问题

目标我想将其用作与菜单中的检查按钮关联的变量


规范LinuxMint14、Python2.7、Tkinter8.5

简短回答:首先调用
root=tk.tk()


长答覆: 引起错误的行

self._tk = master.tk
由于
master
None
而失败。但是,请查看此行上方的代码(在Tkinter.py中):

class Variable:
    def __init__(self, master=None, value=None, name=None):

        if not master:
            master = _default_root
        ...
        self._tk = master.tk
如果将
master
小部件显式传递给
BooleanVar
(它是
变量的子类
),则
master
将不会是
None
。或者,如果
\u default\u root
不是
None
,那么
master
就不是
None


在普通Tkinter应用程序中,在生成
BooleanVar
之前,您将创建一个根窗口。在这种情况下,
tk.BooleanVar()
不会引发错误

root=tk.tk()。如果没有使用
tk.BooleanVar(master)
显式设置主控件,则
\u default\u root
将被
BooleanVar
用作小部件的主控件

总之,在调用
tk.BooleanVar()
之前,可以调用
root=tk.tk()
或类似的设置
\u default\u root
,或者传递一个显式主小部件作为第一个参数:
tk.BooleanVar(master)


作为更新,在Python 3中使用
tkinter
tk.BooleanVar().get()
将返回
False
,而不是
0
True
而不是
1
In [1]: import Tkinter as tk

In [2]: root = tk.Tk()

In [3]: x = tk.BooleanVar()

In [4]: x.set(True)

In [5]: x.get()
Out[5]: 1