Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: GUI > wxPerl


Автор: demetrius2003 16.2.2012, 19:04
Доброго дня всем участникам форума!
Потихоньку осваиваю Перл (под win32 - использую Strawberry perl 5.12.3.0). Тут понадобилось из скрипта отобразить чуток графики. Поискал информацию - нашёл wxPerl. В общем решил пощупать, что за зверь такой. Информации по сабжу на русском маловато. Осваивание начал методом научного тыка. Что сделал:
1 ppm install http://www.wxperl.co.uk/repository/Alien-wxWidgets.ppd
2 ppm install http://www.wxperl.co.uk/repository/Wx.ppd
3 cpan wxPerl::Constructors
После этого хоть что-то заработало! Без проблем запускаются примеры с форумов и мануалов. К примеру - этот:
Код

#!perl
use Wx;

# First, define an application object class to encapsulate the application itself
package HelloWorld;
use base 'Wx::App';

# We must override OnInit to build the window
sub OnInit
{
    my $self = shift;

    my $frame = Wx::Frame->new(undef,           # no parent window
                               -1,              # no window id
                               'Hello, World!', # Window title
                               [-1, -1],        # Position
                               [-1, -1],        # Size
                              );

    my $panel = Wx::Panel->new($frame);

    my $label = Wx::StaticText->new($panel,   # Parent window
                                    -1,       # no window id
                                    'Welcome to the world of WxPerl!',
                                    [20, 20], # Position
                                   );

    $frame->Show(1);
    return 1;
}

# Create the application object, and pass control to it.
package main;
my $app = HelloWorld->new;
$app->MainLoop;

В самом тексте программы мне пока не всё понятно. Но это дело наживное. Собственно самое главное - насколько объектная модель wxPerl совпадает с моделью wxWidgets? Т. е., грубо говоря, могу ли я использовать примеры и описания wxWidgets при работе с wxPerl? В данный момент мне нужно вместо строки Welcome to the world of WxPerl!' отобразить некоторые графические примитивы - линии, прямоугольники, дуги. Возможно ли это? Или это лучше сделать как-то по другому? В общем тут у меня затык. Не могу двинуться далее.

Автор: shamber 17.2.2012, 12:44
demetrius2003
WxPerl::Demo посмотрите, там много хорошего,доброго вечного....

Автор: demetrius2003 17.2.2012, 16:11
Что-то непонятно. Попробовал:
ppm install http://www.wxperl.co.uk/repository/Wx-Demo.ppd
Получил ошибку, но папочка создалась. В основном в примерах, модулях и документации упор делается на контролы - кнопки, полосы прокрутки и почую муть. Что-то я видимо не там ищу. Примитивы ни разу не встретил smile 

Автор: shamber 17.2.2012, 23:00
плохо искали, wxPrinting.pm wxOverlay.pm смотрите там....
Код

sub OnDraw {
  my $this = shift;
  my $dc = shift;
#  my $font = Wx::Font->new( 20, wxSCRIPT, wxSLANT, wxBOLD );

#  $dc->SetFont( $font );
  $dc->DrawRotatedText( "Draw Here", 200, 200, 35 );

  $dc->DrawEllipse( 20, 20, 50, 50 );
  $dc->DrawEllipse( 20, $y_size - 50 - 20, 50, 50 );
  $dc->DrawEllipse( $x_size - 50 - 20, 20, 50, 50 );
  $dc->DrawEllipse( $x_size - 50 - 20, $y_size - 50 - 20, 50, 50 );

  $dc->SetPen( Wx::Pen->new( wxRED, 5, wxSOLID ) );
  # wxGTK does not like DrawLines in this context
  foreach my $i ( @{$this->{LINES}} ) {
    my $prev;

    foreach my $j ( @$i ) {
      if( $j != ${$i}[0] ) {
        $dc->DrawLine( @$prev, @$j );
#       $dc->DrawLines( $i );
      }
      $prev = $j;
    }
  }
}

sub OnMouseMove {
  my( $this, $event ) = @_;

  return unless $event->Dragging;

  my $dc = Wx::ClientDC->new( $this );
  $this->PrepareDC( $dc );
  my $pos = $event->GetLogicalPosition( $dc );
  my( $x, $y ) = ( $pos->x, $pos->y );

  push @{$this->{CURRENT_LINE}}, [ $x, $y ];
  my $elems = @{$this->{CURRENT_LINE}};

  $dc->SetPen( Wx::Pen->new( wxRED, 5, wxSOLID ) );
  $dc->DrawLine( @{$this->{CURRENT_LINE}[$elems-2]},
                 @{$this->{CURRENT_LINE}[$elems-1]} );

}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)