wxPerl example TextCtrl – Button getValue(), appendValue()

Един интересен пример с 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;

wx_example

Кода може да се компилира с Cava Packager 2.0. Това чудо прави страхотни екзета от Perl-скриптове, като добавя всички необходими модули.

Leave a Reply

Your email address will not be published. Required fields are marked *

*