2015-10-26 4 views
1

Так что я сейчас пытаюсь изучить python, и я следую этому руководству на youtube. Мне это удалось. Но когда я запускаю его я получаю сообщение об ошибке:Python, Instance не имеет атрибута

Traceback (most recent call last): 
    File "C:/Users/Frederik/Desktop/test.py", line 29 
    app = Application(root) 
    File "C:/Users/Frederik/Desktop/test.py", line 11, in __init__ 
    self.create_widgets() 
AttributeError: Application instance has no attribute 'create_widgets' 

Это мой код:

from Tkinter import * 

class Application(Frame): 
""" GUI with click counter """ 

    def __init__(self, master): 
    """ Init the frame """ 
    Frame.__init__(self,master) 
    self.grid() 
    self.button_clicks =0 #Counts the button clicks 
    self.create_widgets() 

    def create_widgets(self): 
     """ Create button widget """ 
     self.button = Button(self) 
     self.button["text"] = "Total Clicks: 0" 
     self.button["command"] = self.update_count 
     self.button.grid() 

     def update_count(self): 
      """ Increase click count """ 
      self.button_clicks += 1 
      self.button["text"] = "Total Clicks: " + str(self.button_clicks) 

root = Tk() 
root.title("Button Counter") 
root.geometry("200x100") 

app = Application(root) 

root.mainloop() 
+4

Это фактическое отступом в файле? –

+0

Вам нужно отделить весь 'def __init__' одним уровнем отступов, чтобы гарантировать, что метод принадлежит типу. – poke

+0

Вы фактически определяете функции внутри функций. у вас 'def' на том же уровне отступов, и все будет хорошо. –

ответ

1

Как прокомментировал Матиас, проблема в вашем отступа. Python требует правильного отступов, так как он определяет начало и конец блоков.

Вот как ваш код должен выглядеть:

from Tkinter import * 

class Application(Frame): 
    """ GUI with click counter """ 

    def __init__(self, master): 
     """ Init the frame """ 
     Frame.__init__(self,master) 
     self.grid() 
     self.button_clicks =0 #Counts the button clicks 
     self.create_widgets() 

    def create_widgets(self): 
     """ Create button widget """ 
     self.button = Button(self) 
     self.button["text"] = "Total Clicks: 0" 
     self.button["command"] = self.update_count 
     self.button.grid() 

    def update_count(self): 
     """ Increase click count """ 
     self.button_clicks += 1 
     self.button["text"] = "Total Clicks: " + str(self.button_clicks) 

root = Tk() 
root.title("Button Counter") 
root.geometry("200x100") 

app = Application(root) 

root.mainloop() 
+0

К сожалению. Спасибо, что указали это. –

Смежные вопросы