2009-07-09 13 views
23

비슷한 오류 메시지에 대한 다른 게시물을 보았지만 제 경우에 해결할 해결책을 찾지 못했습니다.Tkinter : AttributeError : NoneType 객체에 속성이 없습니다.

나는 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 (및 packplace) 함수 None를 반환한다. 파이썬에서 a().b()을 수행하면 식의 결과는 b()이 반환하는 값이되므로 Entry(...).grid(...)None을 반환합니다.

이 같은 두 줄에 그 분할해야합니다

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

그런 식으로, 당신은 당신의 Entry 참조 entryBox에 저장 얻고, 당신이 기대하는 것처럼이 배치입니다. grid 및/또는 pack 문을 모두 블록으로 수집하면 레이아웃을 더 쉽게 이해하고 유지 관리 할 수있는 보너스 부작용이 있습니다.

3

변경이 줄이 두 줄에

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

관련 문제