2009-07-09 49 views
23

私は同様のエラーメッセージでいくつかの他の記事を見ましたが、私の場合は解決する解決策が見つかりませんでした。Tkinter:AttributeError:NoneTypeオブジェクトには属性がありませんget

私はTkInterでちょっとダブリングし、非常に簡単なUIを作成しました。コードは次のとおりです:

from string import * 
from Tkinter import * 
import tkMessageBox 

root=Tk() 
vid = IntVar() 

def grabText(event): 
    if entryBox.get().strip()=="": 
     tkMessageBox.showerror("Error", "Please enter text") 
    else: 
     print entryBox.get().strip()  

root.title("My Sample") 
root.maxsize(width=550, height=200) 
root.minsize(width=550, height=200) 
root.resizable(width=NO, height=NO)  

label=Label(root, text = "Enter text:").grid(row=2,column=0,sticky=W) 
entryBox=Entry(root,width=60).grid(row=2, column=1,sticky=W) 
grabBtn=Button(root, text="Grab") 
grabBtn.grid(row=8, column=1) 
grabBtn.bind('<Button-1>', grabText) 

root.mainloop() 

私はUIを稼動させています。私はGrabボタンをクリックすると、私は、コンソールに次のエラーを取得する:

C:\Python25>python.exe myFiles\testBed.py 
Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__ 
    return self.func(*args) 
    File "myFiles\testBed.py", line 10, in grabText 
    if entryBox.get().strip()=="": 
AttributeError: 'NoneType' object has no attribute 'get' 

エラーがTkinter.pyにまでさかのぼります。

これまでに何人かが対処している可能性があります。どんな助けもありがとうございます。

+0

詳細** [**ここ**](https://www.begueradj.com/tkinter-saya-idiom.html) –

答えて

50

Entryオブジェクト(および他のすべてのウィジェットの)のgrid(及びpack、及びplace)関数は、Noneを返します。 Pythonでa().b()を実行すると、式の結果はb()から返されます。したがって、Entry(...).grid(...)Noneを返します。

あなたはこのように、2行にそのを分割する必要があります

entryBox = Entry(root, width=60) 
entryBox.grid(row=2, column=1, sticky=W) 

そのように、あなたはあなたのEntry参照がentryBoxに保存されている取得し、あなたが期待するようにそれがレイアウトされます。 gridおよび/またはpackステートメントのすべてをブロックで収集すると、レイアウトの理解と維持を容易にするという追加の副作用があります。

3

変更この行:この2行に

entryBox=Entry(root,width=60).grid(row=2, column=1,sticky=W) 

entryBox=Entry(root,width=60) 
entryBox.grid(row=2, column=1,sticky=W) 

同じことによってlabelのために行く - あなたはすでに正しくgrabBtnの場合と同様に!

+0

ありがとうございます。私はそれを考えていたはずです:-) – Arnkrishn

関連する問題