2009-06-18 22 views
5

मैं अपने पर्ल कार्यक्रम के लिए एक साधारण विंडोज जीयूआई बनाना चाहता हूं। इसे मूल रूप से एक खिड़की को उछालने, टेक्स्ट बॉक्स में लॉग जानकारी लिखने की आवश्यकता होती है, और एक इनपुट बॉक्स और कुछ स्टार्ट/स्टॉप बटन होते हैं।पर्ल मॉड्यूल?

क्या किसी के पास कोई सुझाव है कि मैं किस पर्ल मॉड्यूल का उपयोग करता हूं? जिन लोगों के साथ मैं क्यूटी की तरह काम करता हूं, ताकि यह वरीयता हो, लेकिन मुझे परेशान नहीं किया जा रहा है।

उत्तर

4

ActiveState से Perl 5.10 पूर्व संकलित आ Tkx जो एक गुई मंच है साथ। यदि आप अधिक वेब उदाहरण वाले मॉड्यूल चाहते हैं तो आप पर्ल Tk डाउनलोड कर सकते हैं। जो भी मॉड्यूल आप उपयोग करते हैं, आप Sourceforge से GUIbuilder डाउनलोड कर सकते हैं और यह पर्ल के लिए बहुत अच्छा टैक्स या टैक्स कोड लिखता है, और पायथन, रूबी के लिए कोड कोड।

इस कोड को काफी हद तक उत्पादन कोड का एक उदाहरण के रूप में 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; 
+0

"हमारा" अवमूल्यन है ... हमम –

+0

इसके बारे में खेद है, लेकिन यह कोड उत्पन्न हुआ था। "मेरे" के लिए "हमारा" ढूंढें और बदलें, हालांकि एक आसान पर्याप्त फिक्स जैसा लगता है। – Akers

+4

ऐप-इनगो: "हमारा" बहिष्कृत नहीं है। केवल अगर आप 5.5.4 का उपयोग करते हैं, तो यह चेतावनी देगा कि यह एक भविष्य का कीवर्ड है। –

7

मैं इस तरह के एक सरल परियोजना के लिए एक बार 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, 
    ), 
); 
6

आपके पास कई विकल्प हैं:

मैं Gtk2 को आंशिक हूँ। यह 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; 
+0

कृपया Wx नहीं, वह ईवेंट लूप बहुत सीमित है। और जिस क्यूटी से आपने लिंक किया है वह बहुत पुराना है Qt2 बाइंडिंग्स (बहुत ही पॉलिश Qt3 और Qt4 इंटरफेस नहीं हैं)। – MkV

+0

प्राइमा को मत भूलना। http://www.prima.eu.org/ - यह एक सुंदर स्लिम पर्ल देशी गुई लाइब्रेरी है। – daotoad

+0

जेम्स 2 वेगास मैंने QtGui को इंगित करने के लिए क्यूटी लिंक को अद्यतन किया है जो QT4 आधारित मॉड्यूल होने का दावा करता है।मैं डब्ल्यूएक्स को भी नापसंद करता हूं, लेकिन यह अभी भी एक विकल्प है। –

0

केवल एक ही मैं का इस्तेमाल किया है पर्ल टी है। यह सीखना जल्दबाजी में था, वेब पर कई उदाहरण हैं, और मै मैक ओएस एक्स से विंडोज़ तक पोर्ट करने में सक्षम था।

नकारात्मकता यह है कि जीयूआई दिनांकित दिखता है। यह घर के औजारों के लिए बहुत अच्छा है, लेकिन तीसरे पक्ष को बेचने के लिए नहीं।

संबंधित मुद्दे