WxRuby Tutorial: Erstellen eines Fensters

###Die Absoluten Grundlagen

Das Programmieren von GUIs ist eine der schönsten Aufgaben die ein Programmierer haben kann. Man schreibt etwas Code, und Volai, es erschein eine schöne GUI, fast  wie magisch auf dem Bildschirm. Es ist ein großer Unterschied ob man einen Parser oder Compiler schreibt (was natürlich auch eine interessante Aufgabe ist), oder ob man eine GUI erstellt. Den Parser oder Compiler kann man nämlich nicht sehen.Das programmieren mit WxRuby ist dabei keine Ausnahme. Mit WxRuby steht einem eine große Auswahl, von einer länderübergreifender Community ausführlich getesteter WxWidgets zu Verfügung - und das beste ist, man kann sie jetzt auch mit Ruby einsetzen. Anstatt lange darüber zu reden wie WxRuby funktioniert beginnen wir am besten mit einem einfachen Beispiel, welches wir anschließend erklären.

require "wx"
include Wx 

 class MinimalApp < App
     def on_init
         Frame.new(nil, -1, "The Bare Minimum").show()
     end
 end
 MinimalApp.new.main_loop

Das war es schon, sehr kurz und einfach, Die erste Zeile require „wx“ muss in jedem Programm auftauchen das WxRuby verwendet – es macht Ruby mit dem WxRuby-Modul bekannt. In der zweiten Zeile wird WxRuby eingebunden, dadurch müssen wie nicht immer den gesamten Klassennamen angeben wenn wir Funktionen aus WxRuby benutzen wollen. Anstatt Wx:App oder Wx:Frame zu schreiben, können wir einfach App oder Frame benutzen. Das ist möglich weil wir das Modul dem Namespace des Programms hinzugefügt haben. Das ist super wenn man mal schnell etwas testen will oder ein Beispiel (oder Tutorial) schreibt. Allerdings empfehle ich bei größeren Programmen immer das WX-Prefix zu verwenden, da man dadurch besser erkennt was zu WxRuby gehört und was nicht.
Die nächste Zeile class MinimalApp < App wird meistens mit dem von euch geschribeenn Code idetisch sein. Jedes WxRuby-Programm muss von der Klasse App abgeleitet werden. App ist die Main-Application-Class, sie ist dafür verantwortlich das Programm zu starten und die GUI bei jedem Schleifendurchlauf zu verwalten. def on_init überschreibt den Konstruktor der App Klasse. Der Konstruktor wird immer aufgerufen wenn das Programm gestartet wird.
 In diesem Beispiel-Programm wird innerhalb unseres Konstruktors eine Frame erstellt. Dieser Frame sagen wir dann auch noch dass sie sich selbst zeigen soll.  Frame.new(nil, -1, "The Bare Minimum").show()

Betrachten wir das ganze jetzt etwas genauer:

  1. Das erste Argument das dem Construktor übergeben wird, ist nil (in anderen Programiersprachen auch oft als NULL bezeichnet). Es sagt WxRuby das die erstellte Frame kein Eltern-Fenster hat.
  2. Das zweite Argument ist der Identifier. Über den Identifier kann das Widget immer wieder angesprochen werden. 
  3. Das dritte Argument ist der Titel des Fensters der auch in der Taskleiste erscheint.
  4. Das vierte Argument das wir hier aber nicht verwenden, ist die Position des Fensters. Es könnte so aussehen Point.new(100,100).
  5. Das fünfte Argument das wir ebenfalls nicht verwenden, gibt die Größe des Fensters an. Bsp: Size.new(600,480).
  6. Das letzte Argument das wir hier in diesem Beispiel auch nicht verwenden gibt die Art des Rahmens an. Der Standartwert ist DEFAULT_FRAME_STYLE.
     

Um Platz zu sparen rufe ich die Metode show() auf. Diese sagt WxRuby das die Frame angezeigt werden soll. Wird „show“ nicht aufgerufen wird der Code ausgeführt ohne das etwas sichtbares passiert. Hinweis: show() akzeptiert einen boolean-Wert wenn man ein Fenster wieder verstecken will kann man einfach show(false) aufrufen.

Am Ende rufe ich MinimalApp.new.main_loop auf. Auch hier habe ich die kurzschreibweise verwendet. Durch den Aufruf der main_loop Methode wird das Programm ausgeführt.

Das war’s. Hier noch mal die wichtigsten Schritte:

  1. require "wx"
  2. include Wx
  3. Erstellen einer Klasse die von App ableitet
  4. Überschreiben des Konstruktors on_init()
  5. Erstellen einer neuen Instanz der Abgeleiteten App-Klasse
  6. Aufrufen der main_loop() Methode

Übersetzt aus dem englischen:
http://wxruby.rubyforge.org/wiki/wiki.pl?Getting_Started

Kommentar schreiben: