V první části si napíšeme základní kostru aplikace. Začneme obyčejným "hello" programem, jako je tento.
Příklad 40.1. Hello program ve wxRuby
#!/usr/bin/env ruby require 'rubygems' require 'wx' class MyApp < Wx::App def on_init frame = Wx::Frame.new(nil, -1, :title => 'Hello, World!') frame.show end end app = MyApp.new app.main_loop
A teď pár slov, jak program funguje. První řádek je známý !#
řádek z Unixových systémů. Operační systém pozná že tento program má spouštět pomocí ruby. Následují dva řádky ve kterých říkáme, že je potřeba rubygems
knihovna a samotná wx
knihovna.
Program píšeme jako podtřídu třídy Wx::App
které reprezentuje WxRuby aplikace. Do metody on_init
naší třídy umístníme kód který se spouští při inicializaci aplikce. V tomto kódu vytvoříme pomocí volání Wx::Frame.new
okno. První parametr každého volání je číslo rodičovského grafického prvku. Protože vytváříme samostatné okno, uvedeme jako hodnotu nil
. Druhý paraametr každého volání je jedinečné ID objektu. Pokud použijeme -1
, říkáme tím wxRuby že nemáme na ID objektu žádné zvláštní požadavky. wxRuby si vybere ID podle sebe. Z dalších parametrů jsem použil jen pojmenovaný parametr :title
kterým nastavím oknu titulek.
A takto to vypadá.
A teď program trochu upravíme. Nejdříve vyjmeme hlavní rámec aplikace z metody on_init
a napíšeme pro něj vlastní třídu. Protože tento rámec časem nebude mnoho metod, je to první krok jak je zvládnout.
class AppFrame < Wx::Frame def initialize super nil, :title => 'Nazdar světe!' end end
Ve třídě aplikace, při spouštění programu, pak tento rámec použijeme.
def on_init @frame = AppFrame.new @frame.show end
Po provedených úpravách vypadá kód takto:
Příklad 40.2. Hello program jinak
#!/usr/bin/env ruby # -*- coding: utf-8; -*- require 'rubygems' require 'wx' class AppFrame < Wx::Frame def initialize super nil, :title => 'Nazdar světe!' end end class MyApp < Wx::App def on_init @frame = AppFrame.new.show end end if $0 == __FILE__ MyApp.new.main_loop end