[ruby-gnome2-doc-cvs] [Hiki] create - tut-gtk-helloworld-details

Zurück zum Archiv-Index

ruby-****@sourc***** ruby-****@sourc*****
2004年 4月 8日 (木) 02:45:19 JST


-------------------------
REMOTE_ADDR = 80.137.231.102
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/de/?tut-gtk-helloworld-details
-------------------------
= Ruby/GTK2 Hello World (Erkl$BgS(Bungen)
{{link "tut-gtk-events", "tut-gtk-intro", "tut-gtk", "tut-gtk-signals-more"}}

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

Als erstes initialisiert das Programm Ruby/GTK2. Dieser Code wird f$B(B alle Ruby/GTK2-Anwendungen ben$B(Bigt.

  #!/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'
  Gtk.init

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 $B(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$B(Bt, wenn das Fenster von dem Window Manager geschlossen wird (dies passiert $B(Blicherweise, wenn der Benutzer es selbst schlie$B_t(B). Beachten Sie, dass wir false in diesem Handler zur$B|c(Bkgeben. Das bedeutet, dass die Ausf$B|h(Brung des Ereignisses noch nicht abgeschlossen ist. GTK wird daher ein "destroy"-Signal ausl$Bvs(Ben.
* "destroy" wird gleich nach dem "delete_event" ausgel$Bvs(Bt.
  In diesem Handler schlie$B_e(Bn wir die Anwendung, indem wir Gtk.main_quit aufrufen.

Zwei Nachrichten werden ausgegeben, wenn der Benutzer das Fenster schlie$B_t(B: Als erstes die Nachricht, dass ein "delete_event ausgel$Bvs(Bt wurde" und dann die, dass ein "destroy Ereignis ausgel$Bvs(Bt 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$Bdl(Bt.

  window.border_width = 10

Der Moment ist gekommen, um unseren Button mit unserem Fenster zu verkn$B|p(Bfen. Das kann getan werden, indem wir den Button in das Fenster packen.

  window.add(button)

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

Dazu k$Bvn(Bnten wir folgenden Code schreiben:

  button.show
  window.show

Aber da der Button bereits in das Fenster gepackt wurde, k$Bvn(Bnen wir genauso gut Gtk::Widget#show_all f$B|r(B das Fenster aufrufen.
Diese Methode ruft Gtk::Widget#show f$B|r(B 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$B_l(Bich $B|b(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$Bvs(Bt wird. Beachten Sie, dass Gtk.main nichts an die aufrufende Methode zur$B|c(Bkgeben 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  






ruby-gnome2-cvs メーリングリストの案内
Zurück zum Archiv-Index