[[:oktatas:programozás:perl:wxperl|< wxPerl]] ====== wxPerl tananyag ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2011, 2012, 2015 * Licenc: GNU Free Documentation License 1.3 * Web: http://szit.hu ===== A wxPerl ===== A wxPerl a Perl egy telepíthető modulja, amelyet Mattia Barbon fejleszt. A wxPerl lehetővé teszi a wxWidgets GUI eszközkészlet használatát Perl programban. A [[http://www.wxwidgets.org/|wxWidgets]] GUI felületek létrehozására, könnyen használható komponensgyűjtemény. Eredetileg C++-ra kitalálva, több platformos megoldásként (Windows/Unix/Mac). ===== Első program ===== #!perl -w use Wx; use utf8; package MyApp; use base 'Wx::App'; sub OnInit { my $frame = Wx::Frame->new( undef, # Szülő ablak -1, # ID -1 azt jelenti bármi (any) 'wxPerl ablak', # cím [-1, -1], # alapértelmezett pozíció [250, 150], # méret ); $frame->Show(1); } package main; my $app = MyApp->new(); $app->MainLoop(); ===== Egy gomb megjelenítése ===== use Wx; use utf8; package MyFrame; use base 'Wx::Frame'; sub new { my $ref = shift; my $self = $ref->SUPER::new(@_); # a superosztály konstruktorának hívása # A komponensek nem hozhatók létre a kereten belül közvetlenül # A keretre egy WX::Panel komponenst helyezünk my $panel = Wx::Panel->new( $self, # szülő -1, # azonosító ); # create a button $self->{btn} = Wx::Button->new( $panel, # parent window -1, # ID 'Kattints ide', # label [30, 20], # position [-1, -1], # default size ); return $self } package MyApp; use base 'Wx::App'; sub OnInit { my $self = shift; # Definiáljuk a $self változót, mert itt is szeretnénk használni my $frame = MyFrame->new( undef, # szülő -1, #ablak azonosító 'Gomb példa', # felirat [1,1], # pozíció [200,150] # méret ); $self->SetTopWindow($frame); # Toplevel ablak definiálása $frame->Show( 1 ); # Frame megjelenítése } package main; my $app = MyApp->new(); # Új MyApp alkalmazás $app->MainLoop; # Eseményhurok ===== Esemény kezelése ===== use Wx; use utf8; package MyFrame; use Wx::Event 'EVT_BUTTON'; use base 'Wx::Frame'; sub new { my $ref = shift; my $self = $ref->SUPER::new(@_); # a superoszztály konstruktorának hívása # A komponensek nem hozhatók létre a kereten belül közvetlenül # A keretre egy WX::Panel komponenst helyezünk my $panel = Wx::Panel->new( $self, # szülő -1, # azonosító ); $self->{txt} = Wx::StaticText->new( $panel, #szülő 1, # azonosító "Esemény példa",# címke [50, 15] # pozíció ); my $BTNID = 1; #gombazonosító rögzítése a $BTNID-ban # gomb létrehozása $self->{btn} = Wx::Button->new( $panel, # szülő $BTNID, # azonosító 'Kattints ide', # címke [50, 50], # pozíció [-1, -1], # alapértelmezett (default) méret ); EVT_BUTTON($self, # az objektum kötése ... $BTNID, # Gombazonosító \&GombClicked # Ez fut le a gombnyomásra ); return $self } sub GombClicked { my ($self, $event) = @_; # A szöveg lecserélése $self->{txt}->SetLabel("A gomb le lett nyomva"); } package MyApp; use base 'Wx::App'; sub OnInit { my $self = shift; # Definiáljuk a $self változót, mert itt is szeretnénk használni my $frame = MyFrame->new( undef, # szülő -1, #ablak azonosító 'Gomb példa', # felirat [1,1], # pozíció [200,150] # méret ); $self->SetTopWindow($frame); # Toplevel ablak definiálása $frame->Show( 1 ); # Frame megjelenítése } package main; my $app = MyApp->new(); # Új MyApp alkalmazás $app->MainLoop; # Eseményhurok