Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Interfaces Graphiques
Interfaces Graphiques Forum d'entraide pour les interfaces graphiques en Perl (TK, GTK, Tk-Zinc, 2D et 3D avec OpenGPL, ....). Avant de poster, veuillez consulter la FAQ Perl/Tk , les cours Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/12/2011, 14h37   #1
x-lours
Invité de passage
 
Homme
Consultant informatique
Inscription : 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.
x-lours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 13h03   #2
x-lours
Invité de passage
 
Homme
Consultant informatique
Inscription : 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
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
x-lours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 19h23   #3
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 553
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 553
Points : 31 769
Points : 31 769
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 !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 12h53   #4
x-lours
Invité de passage
 
Homme
Consultant informatique
Inscription : 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
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 .
x-lours est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h16.


 
 
 
 
Partenaires

Hébergement Web