Неразрешимая ошибка Ruby Gtk2 - PullRequest
0 голосов
/ 22 сентября 2009

Я продолжаю получать ошибку «неинициализировать GLib :: Object» из моего кода.

Вот код:

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

С этим я получаю ошибку

in `set_size_request': uninitialize GLib::Object

Поэтому я перевожу этот кусок кода за пределы класса следующим образом:

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

Тогда я получаю:

in `signal_connect': uninitialize GLib::Object

Так что я изменил его так, чтобы мой класс и переместил метод 'signal_connect' за пределы класса с помощью set_resize_request, который выглядит следующим образом:

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

И это дает мне:

in `add': uninitialize GLib::Object

Gwar! Я изменил это еще раз ...

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

А теперь это?!

in `show_all': uninitialize GLib::Object

Итак, еще раз, я удаляю метод из класса и помещаю его вне класса

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

Может быть ... просто возможно, это сработает на этот раз, так что я надеюсь на лучшее и снова запустите код ...

in `set_size_request': uninitialize GLib::Object

Что ?! Что здесь происходит?

Ответы [ 2 ]

4 голосов
/ 22 сентября 2009

Я думаю, вам нужно позвонить super, прежде чем что-либо еще на этапе инициализации:

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

Также не забудьте добавить Gtk.main:

main_window = MainWindow.new
# Don't forget this...
Gtk.main
3 голосов
/ 22 сентября 2009

В дополнение к ответу khell вы также должны отметить, что ваши первые две строки инициализируются:

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

Создать две локальные переменные, которые никогда не используются. Вы, вероятно, хотите добавить self. туда.

...