40.1.2.1. První okno, "Hello World"

Odkazy:

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á.

Obrázek 40.1. Hello.rbw

Hello.rbw

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

Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .