2009-09-22 10 views
0

Je continue d'obtenir une erreur «désinitialiser GLib :: Object» de mon code.Erreur Ruby Gtk2 non résolue

Voici le code:

class MainWindow < Gtk::Window 
    def initialize 
     title = "I'm The Title Of An Application! Yay!" 
     border_width = 10 
     set_size_request(600, 300) 

     signal_connect("destroy") { Gtk.main_quit } 

     @vbox = Gtk::VBox.new(false, 10) 

     add(@vbox) 
     show_all 
    end 
end 

main_window = MainWindow.new 

Avec cela, je reçois l'erreur

in `set_size_request': uninitialize GLib::Object 

Je propose donc cette friandise de code à l'extérieur de la classe comme ceci:

main_window = MainWindow.new 
    main_window.set_size_request(600, 300) 

Puis je reçois:

in `signal_connect': uninitialize GLib::Object 

Je changer si ma classe et déplacer la méthode 'signal_connect' en dehors de la classe 'set_resize_request', qui ressemble à ceci:

main_window = MainWindow.new 
    main_window.set_size_request(600, 300) 
    main_window.signal_connect("destroy") { Gtk.main_quit } 

Et il me donne:

in `add': uninitialize GLib::Object 

Gwar! Je le change encore ...

main_window = MainWindow.new 
    main_window.set_size_request(600, 300) 
    main_window.signal_connect("destroy") { Gtk.main_quit } 
    main_window.add(@vbox) 

Maintenant ceci?

in `show_all': uninitialize GLib::Object 

Alors, encore une fois, je retire la méthode de la classe et le mettre en dehors de la classe

main_window = MainWindow.new 
    main_window.set_size_request(600, 300) 
    main_window.signal_connect("destroy") { Gtk.main_quit } 
    main_window.add(@vbox) 
    main_window.show_all 

... Peut-être juste peut-être que ça va marcher cette fois-ci, je l'espère le meilleur et exécuter le code à nouveau ...

in `set_size_request': uninitialize GLib::Object 

Quoi ?! Que se passe t-il ici?

Répondre

4

Je pense que vous devez appeler super avant toute autre chose à la phase d'initialisation:

def initialize 
    super 
    # Other code goes here 
    # ... 
end 

Aussi ne pas oublier d'ajouter Gtk.main:

main_window = MainWindow.new 
# Don't forget this... 
Gtk.main 
3

En plus de Khell vous La réponse devrait aussi notez que vos deux premières lignes d'initialize:

title = "I'm The Title Of An Application! Yay!" 
    border_width = 10 

Créez deux variables locales qui ne sont jamais utilisées. Vous voulez probablement y ajouter self..