Erstellen  Editieren  FrontPage  Index  Suchen  Veränderungen  Verlauf  RSS  Login

Ruby/GTK2 Hello World (Erklärungen)

Ruby/GTK2 Hello World (Erklärungen)

Wo wir jetzt also die Theorie hinter Signalen und Ereignissen kennen, können wir uns den Details des "Hello World"-Programms zuwenden.

Als erstes initialisiert das Programm Ruby/GTK2. Dieser Code wird für alle Ruby/GTK2-Anwendungen benötigt.

#!/usr/bin/env ruby
=begin
  helloworld.rb - Ruby/GTK first sample script.

  Copyright (c) 2002,2003 Ruby-GNOME2 Project Team
  This program is licenced under the same licence as Ruby-GNOME2.

  $Id: helloworld.rb,v 1.4 2003/02/01 16:46:22 mutoh Exp $
=end

require 'gtk2'

Hier erstellen wir einen Button mit dem Text "Hello World". Gtk::Button.new erstellt einen neuen GTK-Button und setzt seinen Text (Gtk::Button#label) auf den String-Parameter, den wir übergeben. Im Augenblick ist der Button noch kein Teil eines Windows und wird auch noch nicht angezeigt.

button = Gtk::Button.new("Hello World")

Der folgende Code gibt "Hello World" auf dem Terminal aus, wenn der Butten angeklickt wird.

Das wird durch die Verbindung eines Callback-Blocks zur Ausgabe von Text mit dem "clicked"-Signal des Buttons erreicht

button.signal_connect("clicked") {
  puts "Hello World"
}

Jetzt ist es an der Zeit, das Fenster zu erstellen. Genau wie der Button, ist das Fenster ebenfalls noch nicht auf dem Bildschirm sichtbar.

window = Gtk::Window.new

Wir entscheidung uns, verschiedene Signal-Behandler mit dem Fenster zu verbinden:

  • "delete_event" wird ausgelöst, wenn das Fenster von dem Window Manager geschlossen wird (dies passiert üblicherweise, wenn der Benutzer es selbst schließt). Beachten Sie, dass wir false in diesem Handler zurückgeben. Das bedeutet, dass die Ausführung des Ereignisses noch nicht abgeschlossen ist. GTK wird daher ein "destroy"-Signal auslösen.
  • "destroy" wird gleich nach dem "delete_event" ausgelöst. In diesem Handler schließen wir die Anwendung, indem wir Gtk.main_quit aufrufen.

Zwei Nachrichten werden ausgegeben, wenn der Benutzer das Fenster schließt: Als erstes die Nachricht, dass ein "delete_event ausgelöst wurde" und dann die, dass ein "destroy Ereignis ausgelöst wurde".

window.signal_connect("delete_event") {
  puts "delete event occurred"
  #true
  false
}

window.signal_connect("destroy") {
  puts "destroy event occurred"
  Gtk.main_quit
}

Wir stellen hier die Rahmenbreite des Fensters auf 10 Pixel ein. Was bedeutet das?

GTK-Fenster sind im Grunde Container. Ein Container ist ein Widget, das ein oder mehrere andere Widgets in sich aufnehmen kann. Unser Fenster wird hier einen 10 Pixel breiten Rahmen um das Widget anzeigen, das es enthält.

window.border_width = 10

Der Moment ist gekommen, um unseren Button mit unserem Fenster zu verknüpfen. Das kann getan werden, indem wir den Button in das Fenster packen.

window.add(button)

Der nächste Schritt ist es, unsere bisherige Arbeit auf dem Bildschirm anzuzeigen. Wir lassen zwei Widgets anzeigen: den Button und das Fenster.

Dazu könnten wir folgenden Code schreiben:

button.show
window.show

Aber da der Button bereits in das Fenster gepackt wurde, können wir genauso gut Gtk::Widget#show_all für das Fenster aufrufen. Diese Methode ruft Gtk::Widget#show für das Fenster und jedes Widget in dem Fenster einzeln auf. (In diesem Beispiel gibt es nur ein Widget innerhalb des Fensters: den Button).

window.show_all

Schließlich übergeben wir die Programmkontrolle der Main-Schleife, indem wir Gtk.main aufrufen. Das Programm wird daher so lange nichts tun, bis ein XWindow-Ereignis ausgelöst wird. Beachten Sie, dass Gtk.main nichts an die aufrufende Methode zurückgeben wird.

Aber der Benutzer wird immer noch in der Lage sein, das Programm zu beenden, da wir Gtk.main_quit aufrufen, wenn das "destroy"-Signal empfangen wird.

Gtk.main
Zuletzt geändert:2006/07/02 14:50:11
Stichworte:
Referenzen:[tut-gtk]