PerlGtk.pl

  
Menu główne
use PerlMongers::Warszawa;
use PerlMongers::Krakow;
NG_gRadio
Perl Gtk2 - część 2
  przez wrares (81 odsłon)
Dziś opiszemy, w jak sposób poruszamy się w środowisku deweloperskim. Jaką formę będzie przyjmował nasz skrypt w Perlu. W jaki sposób będziemy łączyć zapis informacji z Glade z naszym programem. Przybliżymy warsztat programistyczny, aby szybkość powstawania aplikacji nie była gorsza, niż w środowiskach płatnych. Na początku Naszej opowieści musimy doinstalować moduł z zasobów CPAN, który jest łącznikiem pomiędzy środowiskami, a mianowicie Gtk2-GladeXML.... Poprawna instalacja tego modułu jest wymagana, gdyż nie będziemy mogli importować plików z Glade. Teraz przejdziemy do opisu skryptu Perla.
#!/usr/bin/perl -w

#******* Sekcja 1 ***********
use strict;
use utf8;

#******* Sekcja 2 ***********
use Gtk2 '-init';
use Glib qw(TRUE FALSE);
use Gtk2::GladeXML;

#******* Sekcja 3 ***********
my ($glade, $okno, $przycisk);

#******* Sekcja 4 ***********
$glade = Gtk2::GladeXML->new('Sygnal.glade');
$glade->signal_autoconnect_from_package('main');


#******* Sekcja 5 ***********
$okno = $glade->get_widget('window1');



#******* Sekcja 6 ***********
$okno->show_all();
Gtk2->main();


#******* Sekcja 7 ***********
sub on_button1_clicked {
    
    Gtk2->main_quit();
    
}


Kod został podzielony na sekcje, dla łatwiejszego opisu. W Sekcji 1 zadeklarowaliśmy moduły które nie są powiązane z bibliotekami Gtk2. Sekcja 2 to moduły które pozwalają nam obsłużyć Gtk2 wykorzystując Ekosystem Perla. W Sekcji 3 deklarujemy zmienne, przy czym konwencja nazewnicza nie będzie się zmieniać we wszystkich Naszych programach demonstracyjnych a mianowicie
Cytat:


[1] $glade - powiązanie poprzez nazwę z plikiem zewnętrznym wygenerowanym przez program Galde.

[2] $okno - nazwa okna najwyższego poziomu



Pozostałe zmienne będą deklarowane w/g potrzeb wynikających z programu. Następna sekcja 4 jest łącznikiem pomiędzy dwoma światami Ekosystem Perla <-> Glade. To w tej sekcji importujemy wszystko to co Nam dostarcza Glade. A więc
Cytat:


[1] $glade = Gtk2::GladeXML->new('Sygnal.glade'); - wiążemy zmienną z plikiem zewnętrznym, oraz udostępniamy we własnej przestrzeni kluczowe informacje pochodzące z pliku XML.

[2] $glade->signal_autoconnect_from_package('main'); - do przestrzeni naszego skryptu importujemy wszystkie nazwy zdefiniowanych sygnałów. Nazwa main jest nazwa domyślną naszego pakietu, więc taką musimy przyjąć aby aby móc obsłużyć sygnały. Więcej na temat pakietów możemy poczytać w dokumentacji.



W sekcji 5 kojarzymy nazwy zmiennych z nazwami zdefiniowanymi w Glade, aby można w jednoznaczny sposób zdefiniować na którym elemencie dokonujemy manipulacji. Posługujemy się procedurą $okno = $glade->get_widget('window1');.

Następna sekcja 6, pozwala Nam wyświetlić wszystkie elementy na formatce oraz wprowadzić program w pętlę oczekiwania. W Sekcji 7 definiujemy obsługę sygnałów, w postaci funkcji, procedur. Zasada nadawania nazw procedur które pojawiają się w skrypcie jest następująca. Tworząc formatkę w Glade, otrzymujemy nazwy które są domyślnie nadawane przez program. Oczywiście możemy je zmieniać i tylko to zależy od Nas. My jednak zostaniemy przy nazewnictwie które dostajemy w programie. Dla przycisku wybierając zakładkę Sygnały, oraz sygnał Clicked otrzymujemy niepowtarzalną nazwę on_button1_clicked, którą musimy skopiować do naszego skryptu i potraktować jako procedurę, którą należy obsłużyć już w samym skrypcie Perla.

Jak pracujemy z Naszymi narzędziami. Powinniśmy mieć otwarty program Glade z Naszymi formatkami, oraz edytor tekstu w którym piszemy kod programu dla Ekosystemu Perla. Pozwoli Wam to uniknąć pomyłek oraz poszukiwania niezgodności. Po za tym jesteście w stanie szybko zmienić właściwości które w innym przypadku trzeba by pisać w kodzie. Przydaje się też okno shella aby można było uruchomić program. W Win32 to program cmd.

A teraz przejdźmy do naszego naszego pliku wygenerowanego z programu Galde.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.3 on Tue Jun 29 13:14:11 2010 -->
<glade-interface>
  <widget class="GtkWindow" id="window1">
    <child>
      <widget class="GtkVBox" id="vbox1">
        <property name="visible">True</property>
        <property name="orientation">GTK_ORIENTATION_VERTICAL</property>
        <property name="orientation">GTK_ORIENTATION_VERTICAL</property>
        <child>
          <widget class="GtkLabel" id="label1">
            <property name="visible">True</property>
            <property name="label" translatable="yes">Tym razem obsługa sygnału pochodzi z Glade</property>
          </widget>
        </child>
        <child>
          <widget class="GtkButton" id="button1">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="label" translatable="yes">Sygnał pochodzi z Glade</property>
            <property name="response_id">0</property>
            <signal name="clicked" handler="on_button1_clicked"/>
          </widget>
          <packing>
            <property name="position">1</property>
          </packing>
        </child>
      </widget>
    </child>
  </widget>
</glade-interface>


Jest to typowy plik XML, z sekcjami, zakresami itp. Warto spojrzeć na umiejscowienie Naszego sygnału . Jak widzimy definicję sygnału która jest importowana do pakietu main odczytujemy w następujący sposób.
Cytat:


W klasie GtkButton o identyfikatorze button1 w którym

zdefiniowano sygnał clicked o nazwie on_button1_clicked



Po nabraniu wprawy nie powinniście mieć trudności z odczytaniem zapisanych informacji. Na tym obrazku mamy przykład naszej formatki w programie Glade.... Na tym ekranie jest uruchomiony program.... Pliki źródłowe są do pobrania z tej strony...
Powrót
Szukaj w PerlGtk.pl
The Perl Job site
Szukaj kodu :