Един интересен пример с WxPerl, който може да ми е полезен, ако реша да програмирам GUI за Windows.
За примера съм инсталирал:
Perl 5.10.1.1008 в директорията D:\installed\perl
Wx 0.9914
Alien-wxWidgets 0.61
Win32-GUI 1.06
Целия пакет с разни други полезни модули може да се изтегли от тук:
ActivePerl-5.10.1.1008-Win32+Win32GUI+WxPerl.rar
Програмата в примера не прави нищо собено, но е достатъчна базова информация, за да се започне скромна диалогова програмка. В общи линии, при натискане на бутон взима текста от едното поле и го добавя към другото поле:
#!/usr/bin/perl -w use strict; use Wx; package MyFrame; use Wx qw (wxVERTICAL wxTOP wxGROW wxHORIZONTAL wxTE_MULTILINE wxFIXED_MINSIZE wxLEFT ); use base 'Wx::Frame'; # import the event registration function use Wx::Event qw(EVT_BUTTON); sub new { my $ref = shift; my $self = $ref->SUPER::new( undef, # parent window -1, # ID -1 means any 'wxPerl rules', # title [-1, -1], # default position [430, 360], # size ); my $panel = Wx::Panel->new( $self, # parent window -1, # ID ); my $button = Wx::Button->new( $panel, # parent window -1, # ID 'Click me!', # label [30, 20], # position [-1, -1], # default size ); $self->{txt} = Wx::TextCtrl->new( $panel, # parent window -1, # control identifier "Type your message here", # default text value [10, 50], # text control position [x, y] [400, 20], # text control size [width, height] # style: wxTE_MULTILINE=The text control allows multiple lines ); $self->{txt2} = Wx::TextCtrl->new( $panel, # parent window -1, # control identifier "", # default text value [10, 100], # text control position [x, y] [400, 200], # text control size [width, height] wxTE_MULTILINE, #=The text control allows multiple lines style => wxTE_MULTILINE ); # register the OnClick method as an handler for the # 'button clicked' event. The first argument is a Wx::EvtHandler # that receives the event EVT_BUTTON( $self, $button, \&OnClick ); return $self; } # this method receives as its first parameter the first argument # passed to the EVT_BUTTON function. The second parameter # always is a Wx::Event subclass sub OnClick { my( $self, $event ) = @_; if (my $rr = $self->{txt}->GetValue()) { print $rr."\n"; $self->{txt2}->AppendText($rr."\n"); } $self->SetTitle( 'Clicked' ); } package MyApp; use base 'Wx::App'; sub OnInit { my $frame = MyFrame->new; $frame->Show( 1 ); } package main; my $app = MyApp->new; $app->MainLoop; |
Кода може да се компилира с Cava Packager 2.0. Това чудо прави страхотни екзета от Perl-скриптове, като добавя всички необходими модули.