Une interface graphique pour la convertion de fichier

Mise à jour: 8 mai 2008
Version: 1.0
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c) 2008 Jean-Louis BICQUELET-SALAÜN

Présentation

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.

Techniquement

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:

  • $w_input_entry->get(); permet de récupérer cette valeur
  • $w_input_entry->delete(0,'end'); $w_input_entry->insert(0,$w_file_in->Show); permet de fixer la valeur de l'entrée
  • $w_file_in = $w_top->FileSelect; permet de récupérer le nm d'un fichier que l'on va fixer par la suite dans une entrée.

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.

Téléchargement

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;
}