2013-03-25 33 views
2

我這樣做蟒蛇殼內:布爾變量在使用TKinter 8.5

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) 

什麼正在進行?

能幫我解決這個問題

目標我想用這個作爲有檢查按鈕在菜單

規格 Linux Mint的14,蟒蛇2.7,Tkinter的相關變量8.5

回答

4

簡答題:首先撥打root = tk.Tk()


龍答: 是提高誤差線,

self._tk = master.tk 

失敗,因爲masterNone。然而,看代碼(在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(這是Variable一個子類),那麼master不會None。或者,如果_default_root不是None,則master不會是None


在正常Tkinter的應用程序,你會做一個BooleanVar之前進行根窗口。在這種情況下,tk.BooleanVar()不會引發錯誤。

root = tk.Tk()設置爲自己的_default_root全局變量(只要useTk參數是True - 它是默認設置)。_default_rootBooleanVar用作小部件的主人,如果沒有明確設置主人tk.BooleanVar(master)

因此,在總結,或者調用root = tk.Tk()或類似的設置_default_root東西叫tk.BooleanVar()之前,或通過明確的主構件作爲第一個參數:tk.BooleanVar(master)

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