Python TKinter 8.5中的布尔变量
我在python shell中执行了以下操作: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
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