开发者

ruby glade3/gtkbuilder example

I'm trying to use glade3 with Ruby, but unfortunately examples of this are few and far between. Looking at what's available, I've come up with the following code, but there's still something missing, as the window does not display. There doesn't seem to be any GtkBuilder 'show' method, so I'm not sure what's needed to make it appear. Does anyone know what I need to do to make this work?

"hello.xml" is just a fairly simple glade3 xml file with a GtkWindow and a button.

#!/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">butto开发者_Go百科n</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>

(edit)

Ugh, it's always the way. Post a question, and I figure out the answer for myself. I needed to get the window1 object from the GtkBuilder, and call its show() method:

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


That program would be a lot easier to write if you used visualruby. This is what your code would look like:

class HelloGlade

  include GladeGUI

  def initialize
    load_glade(__FILE__)
    show_window()
  end

end

You wouldn't need to set the "visible" property, or write code to close the window, or connect the signals. Everything is done automatically. There are plenty of examples here:

http://visualruby.net

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜