Gtk2 et Perl : rafraichissement d'une saisie

Bonjour a tous,

je programme actuellement une interface en Gtk2 ou j’utilise des champs de date pour lancer une exploitation de logs entre ces dates.

C’est très simple, j’ai deux champs $datedebut et $datefin qui sont du type Gtk2::Entry->new_with_max_length(10) et j’ai également un bouton qui appel la fonction “lancer”

dans cette fonction "lancer" je fais mes deux récupérations de valeurs :


	my $debut_exp = $datedebut->get_text(); 
	my $fin_exp = $datefin->get_text();

Celà marche bien. Mais quand mon exploitation est terminée et que je veux en lancer une deuxième, je modifie mes valeurs de date et je clic sur “lancer”. C’est à ce moment que j’ai une erreur :


*** unhandled exception in callback:
***   Can't call method "get_text" without a package or object reference at [CHEMIN VERS MON APPLICATION] line 755.
***  ignoring at [CHEMIN VERS MON APPLICATION] line 654.

[CHEMIN VERS MON APPLICATION]> Can't call method "get_text" without a package or object reference

Je ne vois pas pourquoi Gtk ne réinitialise pas ces valeurs et pourquoi il me renvoie un tel message dans la tronche…
Si quelqu’un a une idée, je suis preneur

Je ne fais pas de Perl mais l’erreur semble indiquer que l’objet entry que tu as créé n’existe plus, il a donc été libéré quelque part dans ton code.
Refait une creation de l’objet entry apres le premier clique juste pour voire …
Ca aide pas des masses mais c’est une piste.

recréer le widget et le replacer dans ma box après la premiere exécution ?

il est toujours présent dans l’affichage… le recréer va me rajouter un champ de saisie de date en bas de la fenetre… comprend pas

Créer au sens programmation du terme, comme je te l’ai dit, je ne fait pas de Perl mais tu dois bien créer un objet/variable de type GtkEntry, non ?
C’est ça que je te demande de recréer, juste pour voire, ça coute rien ('fin, si, une fuite mémoire mais bon ^^).

trouvé !

juste après la création du widget, je le stocke dans une table de hachage globale

$Widgets{datedebut} = $datedebut;

et dans ma fonction lancer je le rapelle comme ca :

my $tmpwidget = $Widgets{datedebut};
my $valeur = $tmpwidget->get_text;

et c’est tout bon :wink: