Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité de passage
    Homme Profil pro
    Consultant informatique
    Inscrit en
    décembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : décembre 2011
    Messages : 4
    Points : 1
    Points
    1

    Par défaut Tkx entry et sélection de fichier

    bonjour,

    mon script doit permettre de choisir un fichier et de saisir
    1 / le numéro de colonne
    2 / le filtre à appliquer sur cette colonne.

    je ne comprends pas pourquoi
    1 / il m'est interdit de positionner la saisie (new_ttk__entry) avant la sélection de fichier (à cause du g_destroy ?)
    et surtout
    2 / après la sélection du fichier (Tkx::tk___getOpenFile), la saisie (new_ttk__entry) est impossible, les champs sont inaccessibles !

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    #!/usr/bin/perl -w
    use warnings;
    use strict;
    use Data::Dumper;
    use Tkx;
     
    my ($lacolonne, @lefiltre);
    my $types = [	['CSV Files', 	 ['.csv']],
    				['Text Files', 	 ['.txt', '.text']],
    				['All Files',	  '*'],];
    my $fichier = Tkx::tk___getOpenFile(	-title => "Sélection du fichier à filtrer",
    										-filetypes => $types);
    unless (-f $fichier) {
    	print "Fichier '$fichier' non trouvé.\n";
    	exit 2;
    }
    unless (@lefiltre) {
    	my $parametre;
    	saisir_2valeurs(\$lacolonne, \$parametre);
    	@lefiltre = qw/$parametre/;
    }
    exit 3 unless ($#lefiltre);
     
    open IN, $fichier or die "Problème à l'ouverture de $fichier E/S: $!\n";
    while ( <IN> ) {
    # 	chomp $_;
    	my @enreg = split( /;/, $_ );
    	for my $filtrage (@lefiltre) {
    		if ($enreg[$lacolonne] =~ /$filtrage/) {
    			open OUT, ">> filtrer_fichier_$filtrage.txt" or die "filtrer_fichier_$filtrage.txt E/S: $!\n";
    			print OUT $_ ;
    			close OUT;
    		}
    	}
    }
    close IN;
     
    =head1 NAME
     
    filtre_fichierCSV.pl
     
    =head1 SYNOPSIS
     
    Interactive mode:
     
      perl filtre_fichierCSV.pl <numéro> <filtre>
     
    =head1 DESCRIPTION
     
    il s'agit de filtrer un fichier sur la colonne <numéro> avec le filtre <filtre>.
    le fichier sur lequel appliquer ce filtre est choisi par une fenêtre de sélection (Tkx).
    le fichier généré s'appelle 'filtrer_fichier.txt'
     
    =cut
     
    sub saisir_2valeurs {
    use Tkx;
     
    	my ($saisie1, $saisie2) = @_;
     
    	my $mw = Tkx::widget->new(".");
    	$mw->g_wm_title("Saisir le type");
    	my $frm = $mw->new_ttk__frame(-padding => "2 3 12 12");
    	$frm->g_grid(-column => 0, -row => 0, -sticky => "nwes");
     
    	my $e_colonn = $frm->new_ttk__entry(-width => 9, -textvariable => $saisie1);
    	$e_colonn->g_grid(-column => 2, -row => 1, -sticky => "we");
    	my $e_filtre = $frm->new_ttk__entry(-width => 9, -textvariable => $saisie2);
    	$e_filtre->g_grid(-column => 2, -row => 2, -sticky => "we");
    	my $cb = $frm->new_ttk__button(-text => "Valider la saisie", -command => sub { $mw->g_destroy; });
    	$cb->g_grid(-column => 3, -row => 3, -sticky => "w");
     
    	$frm->new_ttk__label(-text => "Le numéro de colonne du filtre :")->g_grid(-column => 1, -row => 1, -sticky => "e");
    	$frm->new_ttk__label(-text => "Le filtre à extraire      (qw) :")->g_grid(-column => 1, -row => 2, -sticky => "e");
     
    	foreach (Tkx::SplitList($frm->g_winfo_children)) {
    	    Tkx::grid_configure($_, -padx => 5, -pady => 5);
    	}
    	$e_colonn->g_focus;
    	$mw->g_bind("<Return>", sub { $mw->g_destroy; });
     
    	$mw->g_tkwait_window;
     
    	Tkx::MainLoop();
     
    	print "dans la fenetre $saisie1,$$saisie1; $saisie2,$$saisie2.\n";
     
    }
    toute aide serait la bienvenue
    merci d'avance
    x-lours

    PS
    j'ai déjà éssayé la combinaison Tkx::tk___chooseDirectory + une unique saisie dans new_ttk__entry.
    cela permet bien la saisie dans new_ttk__entry.
    je ne comprends pas la différence

    re PS
    je ne peux pas utiliser Tk, je suis restreint à Tkx.

  2. #2
    Invité de passage
    Homme Profil pro
    Consultant informatique
    Inscrit en
    décembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : décembre 2011
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    bonjour,

    il s'agissait d'une perte du focus sur la fenêtre comprenant les zones de saisies.

    en ajoutant
    Code :
    1
    2
    3
     
    $mw->g_wm_withdraw();
    $mw->g_wm_deiconify();
    avec cet artifice au début de la fonction elle récupère le focus.
    tout ce qui me fallait.

    je ne sais toujours pas où est passé le focus lors de la création de la fenêtre Tkx ...
    si quelqu'un a une piste pour le trouver/localiser sans cet ajout, je suis prenneur

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    16 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 764
    Points : 490 692
    Points
    490 692

    Par défaut

    Tu n'as pas une méthode pour connaitre les widgets ayant le focus ?

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  4. #4
    Invité de passage
    Homme Profil pro
    Consultant informatique
    Inscrit en
    décembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : décembre 2011
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par djibril Voir le message
    Tu n'as pas une méthode pour connaitre les widgets ayant le focus ?
    je ne l'ai pas trouvé,
    surtout que je n'ai qu'un seul widget !
    il me faudrait un moyen de localiser le focus dans toutes les fenêtres ouvertes ou non et pas seulement dans les fenêtres Perl et là je manque de connaissance...
    il faudrait que je me penche sérieusement sur le TCL .

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •