Модуль (модули) Perl для создания простой Microsoft Windows GUI?

Я хотел бы создать простой Windows GUI для своей программы Perl. Это в основном должно породить окно, записать информацию о журнале в текстовое поле и иметь поле ввода и несколько запусков/кнопок остановки.

У кого-либо есть какие-либо подсказки, относительно которых модулей Perl я использую? Люди я работаю с подобным QT, так, чтобы могло быть предпочтение, но я не побеспокоен.

6
задан Sinan Ünür 18 June 2009 в 23:42
поделиться

5 ответов

Я однажды использовал Win32 :: GUI для такого простого проекта. В главном окне было меню, текстовое поле и несколько кнопок и флажков. Это сработало.

Выдержка из метода настройки графического интерфейса пользователя (просто чтобы дать вам представление):

my @menu_items = (
    '&File' => 'File',
    ' > &Open'   => {
        -name    => 'FileOpen', 
        -onClick => sub { $self->onFileOpen(@_) },
    },
    ' > &Close'  => { 
        -name    => 'FileClose',
        -onClick => sub { $self->onFileClose(@_) },
    },
    ' > E&xit'   => { 
        -name    => 'FileExit',
        -onClick => sub { $self->onFileExit(@_) },
    },
    '&Help' => 'Help',
    ' > &About'  => { 
        -name    => 'About',
        -onClick => sub { $self->onHelpAbout(@_) },
    },
);

$self->set_main_menu( Win32::GUI::MakeMenu(@menu_items) );

my $window = $self->set_main_window(
    Win32::GUI::Window->new(
        -menu => $self->get_main_menu,
        -name => 'Main',
        -sizable => 0,
        -resizable => 0,
        -hasmaximize => 0,
        -maximizebox => 0,
        -title => $self->get_program_name,
        -onTerminate => sub { -1 }, 
        -onTimer => sub { $self->onTimer(@_) },
    ),
);

$self->set_log_field(
    $window->AddTextfield(
        -name => 'Log',
        -font => Win32::GUI::Font->new(
            -name => 'LogFont',
            -face => 'Courier New',
            -size => 9,
        ),
        -multiline => 1,
        -wantreturn => 1,
        -autovscroll => 1,
        -vscroll => 1,
        -readonly => 1,
    ),
);

$self->get_log_field->MaxLength(40000);

$self->set_status_bar(
    $window->AddStatusBar(
        -name => 'Status',
        -text => $self->get_program_name,
    ),
);
7
ответ дан 8 December 2019 в 13:48
поделиться

Perl 5.10 от Activestate поставляется с предварительно скомпилированным Tkx, который является платформой Gui. Вы можете скачать Perl Tk, если вам нужен модуль с большим количеством веб-примеров. Какой бы модуль вы ни использовали, вы можете загрузить GUIbuilder из sourceforge, и он пишет довольно хороший код Tk или Tkx для perl и код Tk для python, ruby.

Этот код был в значительной степени сгенерирован GuiBuilder как пример выходного кода:

use Tkx;
Tkx::package_require('BWidget');

sub example::ui {
     my($root) = @_;

     my($_entry_box) = $root->new_entry(
     -width => 0,
     );
     my($_text_box) = $root->new_text(
         -height => 0,
         -width => 0,
     );
     my($_label) = $root->new_label(
          -text => "Hello World",
     );
     my($_textbox_horiz_scrollbar) = $root->new_scrollbar(
          -orient => "horizontal",
     );
     my($_textbox_vert_scrollbar) = $root->new_scrollbar(
     );
     my($_Start_Button) = $root->new_Button(
          -text => "Start",
          -width => 10,
     );
     my($_Stop_Button) = $root->new_Button(
          -text => "Stop",
          -width => 10,
     );

     $_entry_box->configure(
          -invalidcommand => \&_entry_box_invalidcommand
     );
     $_entry_box->configure(
          -validatecommand => \&_entry_box_validatecommand
     );
     $_entry_box->configure(
          -xscrollcommand => \&_entry_box_xscrollcommand
     );
     $_text_box->configure(
          -xscrollcommand => [ $_textbox_horiz_scrollbar => set ]
     );
     $_text_box->configure(
          -yscrollcommand => [ $_textbox_vert_scrollbar => set ]
     );
     $_textbox_horiz_scrollbar->configure(
          -command => [ $_text_box => xview ]
     );
     $_textbox_vert_scrollbar->configure(
          -command => [ $_text_box => yview ]
     );
     $_Start_Button->configure(
          -armcommand => \&_Start_Button_armcommand
     );
     $_Start_Button->configure(
          -command => \&_Start_Button_command
     );
     $_Start_Button->configure(
          -disarmcommand => \&_Start_Button_disarmcommand
     );
     $_Stop_Button->configure(
          -armcommand => \&_Stop_Button_armcommand
     );
     $_Stop_Button->configure(
          -command => \&_Stop_Button_command
     );
     $_Stop_Button->configure(
          -disarmcommand => \&_Stop_Button_disarmcommand
     );
     sub _entry_box_xscrollcommand {}

# Geometry Management
     $_entry_box->g_grid(
          -in     => $root,
          -column => 1,
          -row    => 2,
          -columnspan => 3,
          -ipadx => 0,
          -ipady => 0,
          -padx => 0,
          -pady => 5,
          -rowspan => 1,
          -sticky => "ew"
     );
     $_text_box->g_grid(
          -in     => $root,
          -column => 1,
          -row    => 3,
          -columnspan => 2,
          -ipadx => 0,
          -ipady => 0,
          -padx => 0,
          -pady => 0,
          -rowspan => 1,
          -sticky => "news"
     );
     $_label->g_grid(
          -in     => $root,
          -column => 1,
          -row    => 1,
          -columnspan => 3,
          -ipadx => 0,
          -ipady => 0,
          -padx => 0,
          -pady => 0,
          -rowspan => 1,
          -sticky => "ew"
     );
     $_textbox_horiz_scrollbar->g_grid(
          -in     => $root,
          -column => 1,
          -row    => 4,
          -columnspan => 2,
          -ipadx => 0,
          -ipady => 0,
          -padx => 0,
          -pady => 0,
          -rowspan => 1,
          -sticky => "ew"
     );
     $_textbox_vert_scrollbar->g_grid(
          -in     => $root,
          -column => 3,
          -row    => 3,
          -columnspan => 1,
          -ipadx => 0,
          -ipady => 0,
          -padx => 0,
          -pady => 0,
          -rowspan => 1,
          -sticky => "ns"
     );
     $_Start_Button->g_grid(
          -in     => $root,
          -column => 1,
          -row    => 5,
          -columnspan => 1,
          -ipadx => 0,
          -ipady => 0,
          -padx => 0,
          -pady => 0,
          -rowspan => 1,
          -sticky => ""
     );
     $_Stop_Button->g_grid(
          -in     => $root,
          -column => 2,
          -row    => 5,
          -columnspan => 2,
          -ipadx => 0,
          -ipady => 0,
          -padx => 0,
          -pady => 0,
          -rowspan => 1,
          -sticky => ""
      );


# Resize Behavior
     $root->g_grid_rowconfigure(1, -weight => 0, -minsize => 2, -pad => 0);
     $root->g_grid_rowconfigure(2, -weight => 0, -minsize => 12, -pad => 0);
     $root->g_grid_rowconfigure(3, -weight => 1, -minsize => 85, -pad => 0);
     $root->g_grid_rowconfigure(4, -weight => 0, -minsize => 4, -pad => 0);
     $root->g_grid_rowconfigure(5, -weight => 0, -minsize => 40, -pad => 0);
     $root->g_grid_columnconfigure(1, -weight => 1, -minsize => 67, -pad => 0);
     $root->g_grid_columnconfigure(2, -weight => 1, -minsize => 186, -pad => 0);
     $root->g_grid_columnconfigure(3, -weight => 0, -minsize => 2, -pad => 0);
}

my($root) = Tkx::widget->new('.');
$root->g_wm_title('stackoverflow');
example::ui($root);

Tkx::MainLoop();

1;
4
ответ дан 8 December 2019 в 13:48
поделиться

Я использовал только Perl Tk. Это было быстро освоить, в сети есть много примеров, и я смог быстро портировать с Mac OS X на Windows.

Обратной стороной является то, что графический интерфейс выглядит устаревшим. Он отлично подходит для собственных инструментов, но не для продажи третьим лицам.

0
ответ дан 8 December 2019 в 13:48
поделиться

У вас есть несколько вариантов:

Я неравнодушен к Gtk2. Его легко установить в MS Windows с помощью установщика CamelBox .

Простое приложение в стиле «привет, мир» выглядит как

#!/usr/bin/perl

use strict;
use warnings;

use Gtk2;

Gtk2->init;

my $window = Gtk2::Window->new;
my $vbox   = Gtk2::VBox->new;
my $label  = Gtk2::Label->new("Hello World");
my $button = Gtk2::Button->new("Press me");

$window->add($vbox);
$vbox->add($label);
$vbox->add($button);

my $i;
$button->signal_connect(clicked => sub {
    $label->set_text("button pressed " . ++$i . " times");
});

$window->signal_connect(destroy => sub { Gtk2->main_quit });

$window->show_all;

Gtk2->main;
6
ответ дан 8 December 2019 в 13:48
поделиться

используйте Perl / Tk

0
ответ дан 8 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: