2016-03-22 26 views
-1

Bu basit bir Python Tkinter uygulamasıdır.Python Tkinter'da bir AttributeError alın. Nasıl düzeltilir?

from tkinter import * 

class Window(Frame): 
    def __init__(self, master = None): 
     Frame.__init__(self, master) 
     self.master = master 
     self.init_window() 
    def init_window(self): 
     self.master.title('GUI') 
     self.pack(fill=BOTH, expand=1) 

     text = Entry(self, bd=1) 
     text.pack(side = TOP) 

     submit_b = Button(self, text = 'submit', command = self.submit) 
     submit_b.pack(side = BOTTOM) 
    def submit(self): 
     print(self.text.get()) 

root = Tk() 
root.geometry('200x50') 

app = Window(root) 

root.mainloop() 

Sonuç aşağıdaki gibidir:

enter image description here

Yani 'Entry' bir dize girin ve düğmeye 'Gönder' tıklayın İşte kodudur. Bu program dizeyi basacaktır.

Ancak, bu var:

AttributeError: 'Window' object has no attribute 'text' 

Ben işe yaramadı neden hiçbir fikrim yok. Lütfen bana yardım et!

cevap

4

sadece text beyanında self unuttu: Böylece text

self.text = Entry(self, bd=1) 
    self.text.pack(side = TOP) 

bitmiş __init__ sonra "unutulan" derhal yerel değişken ve oldu. Bu şekilde, örneğin bir üye değişkeni olup submit içinden erişilebilir. Örneğin, ör. Java'nın this ile aynı ada sahip bir yerel değişken bulunamazsa Python otomatik olarak bir örnek değişkeni aramaz. self, değil isteğe bağlı ya da sadece belirsizlik giderme içindir.

Alternatif olarak, çok yerel bir değişken olarak text tutmak, fakat submit yerel yapabiliriz: Eğer __init__ dışında o düğmeye atıfta bulunmayan olarak submit_b için,, self gerekmez

text = Entry(self, bd=1) 
    text.pack(side = TOP) 
    def submit(): 
     print(text.get()) 
    submit_b = Button(self, text = 'submit', command = submit) 
    submit_b.pack(side = BOTTOM) 

yöntem. Aslında, pack çağrısının, hiç düğmeye atıfta bulunmayan, bu yüzden bile yapabilirdi:

Button(self, text = 'submit', command = submit).pack(side = BOTTOM) 
+0

Bu doğrudur! Teşekkür ederim! Ama senden neden kendim eklemek istemediğini sorabilir miyim? –

İlgili konular