[[: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