Пример ruby ​​glade3 / gtkbuilder - PullRequest
       27

Пример ruby ​​glade3 / gtkbuilder

3 голосов
/ 07 октября 2011

Я пытаюсь использовать glade3 с Ruby, но, к сожалению, примеров этого мало и далеко не всегда. Глядя на то, что доступно, я придумал следующий код, но все еще чего-то не хватает, так как окно не отображается. Похоже, что GtkBuilder не имеет метода show, поэтому я не уверен, что нужно для его появления. Кто-нибудь знает, что мне нужно сделать, чтобы сделать эту работу?

"hello.xml" - это довольно простой XML-файл glade3 с GtkWindow и кнопкой.

#!/usr/bin/env ruby

require 'rubygems'
require 'gtk2'

class HelloGlade
  attr :glade

  def initialize
    if __FILE__ == $0
      Gtk.init
      builder = Gtk::Builder::new
      builder.add_from_file("hello.xml")
      builder.connect_signals{ |handler| method(handler) }  # (I don't have any handlers yet, but I will have eventually)
      Gtk.main()
    end
  end

  def gtk_main_quit
    puts "Gtk.main_quit"
    Gtk.main_quit()
  end
end


hello = HelloGlade.new

hello.xml:

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <requires lib="gtk+" version="2.24"/>
  <!-- interface-naming-policy project-wide -->
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkButton" id="button1">
        <property name="label" translatable="yes">button</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">True</property>
        <property name="use_action_appearance">False</property>
      </object>
    </child>
  </object>
</interface>

(редактировать)

Тьфу, это всегда так. Отправьте вопрос, и я сам найду ответ. Мне нужно было получить объект window1 из GtkBuilder и вызвать его метод show ():

...
window = builder.get_object("window1")
window.show()
Gtk.main

1 Ответ

0 голосов
/ 25 марта 2012

Эту программу было бы намного проще написать, если бы вы использовали visualruby. Это как будет выглядеть ваш код:

class HelloGlade

  include GladeGUI

  def initialize
    load_glade(__FILE__)
    show_window()
  end

end

Вам не нужно устанавливать свойство visible или писать код для закрытия окна или подключать сигналы. Все делается автоматически. Здесь есть множество примеров:

http://visualruby.net

...