![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
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; }