3.1. Hello World in Ruby-GNOME2

Now for a program with a widget (a button). It's the classic hello world via Ruby-GNOME2. If you don't feel like typing all of this out, you can find a very similar program in the ruby-gnome2 directory, gtk/sample/misc/helloworld.rb. It will behave a bit different, but not much.

Screenshot of helloworld.rb
# This initializes our library
require 'gtk2'

# This is a callback method. The data argument is ignored.
def hello( widget )
   puts "Hello World"
end

def delete_event( widget, event )

   # If you return false in the "delete_event" signal handler,
   # GTK will emit the "destroy" signal. Returning true means
   # that you don't want the window to be destroyed.
   # This is useful for popping up 'are you sure you want to quit?'
   # type dialogs.
   puts "delete event occurred."

   # Change true to false and the main window will be destroyed with
   # a "delete_event".
   return true
end

# Another callback
def destroy( widget )
   Gtk.main_quit
end

# This is called in all Ruby-GNOME2 applications.
Gtk.init

# Create a new window.
window = Gtk::Window.new( Gtk::Window::TOPLEVEL )

# Sets the window title.
window.set_title( "helloworld.rb" )

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

# 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 method
# as defined above. The data passed to the callback
# method is nil and is ignored in the callback method.
window.signal_connect( "delete_event" ) {
   delete_event( nil, nil )
}

# 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.
window.signal_connect( "destroy" ) {
   destroy( nil )
}

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

# When the button receives the "clicked" signal, it will call the
# method hello, passing it nil as the argument. The hello
# method is defined above.
button.signal_connect( "clicked" ) {
   hello( nil ) 
}

# This packs the button into the window( a Gtk::Container )
window.add( button )

# The final step is to display the newly created widget
button.show

# And the window
window.show

# All Ruby-GNOME2 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

Prev Next