2013-05-22 3 views
2

Я получаю эту ошибкуАтрибут Ошибка: HelloWorld Instance не имеет атрибута главного

Traceback (most recent call last): 
    File "helloworld.py", line 66, in module 
     hello.main() 
AttributeError: Helloworld instance has no attribute 'main' 

Я бегу код приведен ниже на Linux машине

#!/usr/bin/env python 

# example helloworld.py 
import pygtk 
pygtk.require('2.0') 
import gtk 

class HelloWorld: 

    # This is a callback function. The data arguments are ignored 
    # in this example. More on callbacks below. 
    def hello(self, widget, data=None): 
     print "Hello World" 

    def delete_event(self, widget, event, data=None): 
     # If you return FALSE in the "delete_event" signal handler, 
     # GTK will emit the "destroy" signal. Returning TRUE means 
     # you don't want the window to be destroyed. 
     # This is useful for popping up 'are you sure you want to quit?' 
     # type dialogs. 
     print "delete event occurred" 

     # Change FALSE to TRUE and the main window will not be destroyed 
     # with a "delete_event". 
     return False 

    def destroy(self, widget, data=None): 
     print "destroy signal occurred" 
     gtk.main_quit() 

    def __init__(self): 
     # create a new window 
     self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 

     # When the window is given the "delete_event" signal (this is given 
     # by the window manager, usually by the "close" option, or on the 
     # titlebar), we ask it to call the delete_event() function 
     # as defined above. The data passed to the callback 
     # function is NULL and is ignored in the callback function. 
     self.window.connect("delete_event", self.delete_event) 

     # Here we connect the "destroy" event to a signal handler. 
     # This event occurs when we call gtk_widget_destroy() on the window, 
     # or if we return FALSE in the "delete_event" callback. 
     self.window.connect("destroy", self.destroy) 

     # Sets the border width of the window. 
     self.window.set_border_width(10) 

     # Creates a new button with the label "Hello World". 
     self.button = gtk.Button("Hello World") 

     # When the button receives the "clicked" signal, it will call the 
     # function hello() passing it None as its argument. The hello() 
     # function is defined above. 
     self.button.connect("clicked", self.hello, None) 

     # This will cause the window to be destroyed by calling 
     # gtk_widget_destroy(window) when "clicked". Again, the destroy 
     # signal could come from here, or the window manager. 
     self.button.connect_object("clicked", gtk.Widget.destroy, self.window) 

     # This packs the button into the window (a GTK container). 
     self.window.add(self.button) 

     # The final step is to display this newly created widget. 
     self.button.show() 

     # and the window 
     self.window.show() 

    def main(self): 
     # All PyGTK applications must have a gtk.main(). Control ends here 
     # and waits for an event to occur (like a key press or mouse event). 
     gtk.main() 

# If the program is run directly or passed as an argument to the python 
# interpreter then create a HelloWorld instance and show it 
if __name__ == "__main__": 
    hello = HelloWorld() 
    hello.main() 

Является ли это отступа проблема? Как его решить? Я пробовал искать в Интернете, но без помощи. Это тот же код, что и в учебнике pyGTK. Пожалуйста, помогите.

+1

(1) Ваше сообщение об ошибке не соответствует вашему коду. Ваше сообщение об ошибке относится к 'Helloworld', с нижним регистром' w', но ваш код имеет «HelloWorld» с капиталом 'W'. В сообщении об ошибке говорится, что 'hello.main()' находится в строке 66, но ISTM ближе к ~ 80. Вы уверены, что используете программу, которую вы считаете собой? (2) Чтобы не возникало проблем со смешанными языками и пространствами (это выглядит хорошо для меня, но это трудно сделать), запустите свою программу, используя 'python -tt your_program_name.py'. – DSM

+0

Эй, это не код. На самом деле я загрузил этот пост из Windows, а код в Linux был немного изменен (я удалил несколько пробелов). После предоставления правильного отступа, код работал отлично в linux. Ура! –

ответ

1

Я просто скопировал этот код на свою машину Linux и запустил его, и он работал отлично, без ошибок. Вы запускаете это из командной строки? Мне нравится $python helloworld.py? Или вы пытаетесь запустить его через сеанс консоли Python?

Отступ, похоже, не является проблемой. Какую версию Python вы используете?

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