Perl 5.10 from Activestate come pre-compiled with Tkx which is a Gui Platform. You can download Perl Tk if you'd like a module with more web examples. Which ever module you use, you can download GUIbuilder from sourceforge and it writes pretty good Tk or Tkx code for perl, and Tk code for python, ruby.
This code was largely generated by GuiBuilder as an example of output code:
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;