Il m'arrive souvent d'écrire des scripts en PERL, destiné à convertir des fichiers d'un format à un autre, à préparer des données, etc. Ceci m'a donné l'idée de créer une interface générique en TK. Avec python c'est intégré, grace à Tkinter, en PERL on peut être amené à installer PerlTK voir à le recompiler(sous AIX par exemple). Cependant, PERL est maintenant répendu sur tous les serveurs (en particulier ceux de production), il s'agit donc d'un outil utile.
L'interface se présente ainsi:

On trouve trois rangées. Chque rangée est composé d'une frame qui contient ses widgets. Seule la dernière rangée pour indiquer qu'elle contient les boutons controllant le programme à des caractérisques fixées à -relief =>'ridge', -bd => 3 ce qui indique un relief 3D d'une profondeur de 3.
+----------------+----------------+----------------+ | label | entry | button | +----------------+----------------+----------------+ | label | entry | button | +----------------+----------------+----------------+ | button | button | button | button | button | | +----------------+----------------+----------------+
Chaque bouton à une subroutine associé par la commande -command => \&subroutine_cb.
Les entrées sont manipulées avec les commandes suivantes:
Les subroutines about_cb et help_cb fournissent des exemples d'utilisation de boite de messages et de boites de dialogues.
La subroutine name_cb permet de changer l'extension d'un nom de fichier.
La subroutine convert_cb traduit de manière minimaliste un fichier texte en un fichier html en mettant en mode ascii simple le fichier.
Le fichier est téléchargeable ici: fileconv.pl
En voici le source
#! perl -w
#***********************************************************************************
# fileconv An example of graphical interface
# version 1.0
# Author: JL BICQUELET
# Date : 8 may 2008
#***********************************************************************************
# use strict;
use Tk;
use Tk::FileSelect;
#===================================================================================
# graphic interface
#===================================================================================
my $w_top = new MainWindow;
$w_top->configure(-title => "file convert v 1.0");
my $w_file_in;
my $w_file_out;
my $w_frame1 = $w_top->Frame;
$w_frame1->Label(-text => "Input file: " )->pack(-side => 'left');
my $w_input_entry = $w_frame1->Entry(-relief => 'sunken', -width=>30);
$w_input_entry->pack(-padx => 10, -pady => 10)->pack(-side => 'left');
$w_frame1->Button(-text => "Browse ..", -command => \&browse_input_cb )->pack(-side => 'left');
$w_frame1->pack;
my $w_frame2 = $w_top->Frame;
$w_frame2->Label(-text => "Output file:" )->pack(-side => 'left');
my $w_output_entry = $w_frame2->Entry(-relief => 'sunken', -width=>30);
$w_output_entry->pack(-padx => 10, -pady => 10)->pack(-side => 'left');
$w_frame2->Button(-text => "Browse ..", -command => \&browse_output_cb )->pack(-side => 'left');
$w_frame2->pack;
my $w_frame3 = $w_top->Frame(-relief =>'ridge', -bd => 3);
$w_frame3->Button(-text => "name",-command => \&name_cb )->pack(-side => 'left');
$w_frame3->Button(-text => "convert",-command => \&convert_cb )->pack(-side => 'left');
$w_frame3->Button(-text => "help",-command => \&help_cb )->pack(-side => 'left');
$w_frame3->Button(-text => "about",-command => \&about_cb )->pack(-side => 'left');
$w_frame3->Button(-text => "quit",-command => sub { exit 0; } )->pack(-side => 'left');
$w_frame3->pack(-side => 'left',-padx => 16,-pady => 6, -ipadx => 1 , -ipady => 1);
MainLoop;
#===================================================================================
# call backs for action
#===================================================================================
#----------------------------------------------------------------------------------
# get input filename
#----------------------------------------------------------------------------------
sub browse_input_cb
{
$w_file_in = $w_top->FileSelect;
$w_input_entry->delete(0,'end');
$w_input_entry->insert(0,$w_file_in->Show);
&name_cb();
}
#----------------------------------------------------------------------------------
# get output filename
#----------------------------------------------------------------------------------
sub browse_output_cb
{
$w_file_out = $w_top->FileSelect;
$w_output_entry->delete(0,'end');
$w_output_entry->insert(0,$w_file_out->Show);
}
#----------------------------------------------------------------------------------
# deduce name of the output filename from the input filename
#----------------------------------------------------------------------------------
sub name_cb
{
$name=$w_input_entry->get();
# passage de txt en html
$name=~s/\.pl/.html/;
$w_output_entry->delete(0,'end');
$w_output_entry->insert(0,$name);
}
#----------------------------------------------------------------------------------
# about information dialog
#----------------------------------------------------------------------------------
sub about_cb
{
my $response = $w_top -> messageBox(-message=>"Fileconv v 1.0\nA file converter\n(c) 2008 JL BICQUELET",-type=>'ok',-icon=>'question');
}
#----------------------------------------------------------------------------------
# convert the file
#----------------------------------------------------------------------------------
sub convert_cb
{
# convert
}
#----------------------------------------------------------------------------------
# help for fileconv
#----------------------------------------------------------------------------------
sub help_cb
{
$w_top->Dialog(
-title => 'Help',
-text => "Convert a file txt into html file",
-buttons => ['Dismiss'])->Show;
}