IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Perl Discussion :

Problemes d'affichage fenêtre principale


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut Problemes d'affichage fenêtre principale
    Salut,

    J'ai réalisé un petit programme avec interface graphique, mais je recontre qqs problèmes d'affichage.
    Je m'explique: l'un des boutons de mon application permet de lancer un calcul qui prend un certain temps (qq minutes) et lorsque ce calcul est lancé, l'affichage de ma fenêtre principale bugue: Losrque j'ouvre ou me deplace vers une autre fenêtre quelconque (par exemple la fenêtre dos) et que je reviens sur la fenêtre Tk, elle devient toute blanche ou inaccessible. D'autre part le bouton qui lance l'application reste enfoncé jusqu'à la fin du calcul.
    En fait, j'aimerais savoir à quoi cela pourrait être dû et comment pallier à cela?

    Je ne sais pas si c'est très clair, je débute en perl et en TK....

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Ton problème est clair et normal.
    En fait, lorsque tu lances un programme, calcul ou autre qui prends beaucoup de temps, pendant que le calcul s'effectue, Tk reste figé. Et si tu ouvre un répertoire, navigateur ou autre et que tu reviens dessus, t'auras l'impression qu'il plante, mais en faite non, il bosse. Et tu n'aura la main que lorsque ton programme sera terminé.

    C'est assez désagréable, c'est vrai mais c'est ainsi. ton calcul dur combien de temps ?

    Une première façon de faire si c'est possible dans ton programme, c'est de faire un update de ton widget ($Widget->update) dans ton programme faisant le calcul. Le faite de rafraichir régulièrement le widget est une bonne idée pour éviter que ton application reste figé. Faut que tu nous montre ton programme.

    Sinon, dernière solution, mais ça dépend toujours de ton programme, c'est de faire des threads, c'est à dire créer un processus indépendant. Ainsi, ton Tk et ton calcul se feront de façon indépendante. Mais ce n'est pas évident de le faire en TK.

    Dans un premier temps, je te demanderai de nous montrer ton code.

  3. #3
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Mon calcul dure en moyenne 3 minutes (peut aller jusqu'à 10).

    Je ne sais pas trop quoi montrer comme code (ça fait quelques lignes)...

    Voilà le code de la callback associé au bouton par lequel je lance le calcul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    sub ok3{
     
    	my $cpt = 0;
    	my @DATAtoSIM = (); #tableau des stations à simuler (contient des objets VirtualSta)
     
    	$pages->pageconfigure('recap', -state=>"disable");
    	$pages->pageconfigure('geo', -state=>"disable");
    	$pages->pageconfigure('time', -state=>"disable");
    	$pages->pageconfigure('run', -state=>"normal");
    	$pages->raise('run');
     
    	foreach my $ligne (@lignes){
    		my @elem = $ligne->children;
    		my $checkbox = $elem[-1];
    		my $variable = $checkbox->cget(-variable);
    		if(defined($$variable) and ($$variable eq 'o')){
    			push(@DATAtoSIM,$DATA[$cpt]);
    		}
    	$cpt++;	
    	}
    	$gnow->just_now; 
    	my $date = $gnow->st_crd_epoch;  $date=~s/EPOCH: //;
    	$gest->fill("Stations à simuler",$date,\@DATAtoSIM);
    	$gest->sort_stations();	
     
    	$gest->print_all;
    	simstations($gest,$dirsave);  #C'est là que lance le calcul
    	$pages->pageconfigure('geo', -state=>"normal");
    }

    J'en profite d'ailleurs pour poser une autre question: ma GUI comprend un widget notebook et comme vous pouvez le voir j'essaie d'atteindre la dernière page () avant de lancer mon calcul, or ça ne marche pas.... enfin si mais lorsque le calcul est terminé (j'aimerais plutôt que ça se fasse avant).

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Peux tu nous montrer la méthode simstations ? Car c'est là qu'on va pouvoir faire des updates

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Pour ta page d'onglet, essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $WidgetParent->update;
    $pages->raise('run');
    $WidgetParent->update;

  6. #6
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Le problème c'est que d'une part que la méthode simstations est assez longue et d'autre part qu'elle ne fait aucune référence à mes widgets.
    C'est un module à part qui fait le calcul indépendamment du reste.

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    C pas grave, tu lui passes bien des parametres, donc tu peux lui passer en paramètre ton $Widget.

    Et dans le module, faire un $Widget->update; à plusieurs endroit.

    Sinon, on peux toujours asseyer de faire des threads.

  8. #8
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Merci Djibril,

    Ok, les update ça marche!

    Du coup cela amène une autre question (désolé) qui rejoindra la conversation de vendredi sur la redirection de flux dans un widget text.
    En fait, une fois que mon calcul est lancé, je fais pour atteindre la dernière page contenant un simple widget text. J'aimerais pouvoir afficher mon rapport de calcul en temps réel (comme dans la fenêtre DOS) or ce qui semblait marcher vendredi plante aujourd'hui (ça pourrait être un proverbe )
    En fait tout marche bien pour ce que j'ecris moi, mais concernant le module exterieur ça plante avec un beau message d'erreur:

    Tk::Error: Can't locate auto/Tk/Text/WRITE.al in @INC (@INC contains: D:\Bernese\BERN50\BPE D:\B
    se\BERN50\GPS/EXE C:/Perl/site/lib C:/Perl/lib .) at D:\Bernese\BERN50\BPE/bpe_util.pm line 604
    Carp::croak at C:/Perl/lib/Carp.pm line 269
    AutoLoader::AUTOLOAD at C:/Perl/lib/AutoLoader.pm line 112
    bpe_util::sysprint at D:\Bernese\BERN50\BPE/bpe_util.pm line 604


    Pour les détails voici la ligne 604 du module bpe_util (le fameux module externe):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return syswrite(STDOUT,$text,length($text));
    Je fais ma redirection sur STDOUT avec la commande tie (dont je n'ai pas complètement compris le fonctionnement; vue sur un forum)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tie *STDOUT, 'Tk::Text', $txt;

    Voilà si qqn a la réponse, je lui serais vraiment reconnaissant

  9. #9
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Dans ta procédure Button qui appelle ton calcul, tu fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $pages->raise('run');
    ...
     
    tie *STDOUT, ref $TonWidgetText, $TonWidgetText;

  10. #10
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Djibril, je crois que tu as répondu lorsque j'éditais mon message, ou alors tu lis dans les pensées!

  11. #11
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut

  12. #12
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Du coup, tu aurais une idée d'où peut venir le problème?

    c'est quoi ce WRITE.al ???

  13. #13
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Regarde la FAQ Perl/Tk, j'explique comment rediriger les erreurs Perl Tk dans un widget

  14. #14
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Oui, j'ai bien lu mais je ne vois pas trop le rapport avec mon problème.
    Je ne veux pas afficher les messages d'erreurs dans une fenêtre Tk....

  15. #15
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    syswrite(STDOUT,$text,length($text));
    Que souhaites tu vraiment faire ?

  16. #16
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Ce n'est pas moi qui ai écrit ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    syswrite(STDOUT,$text,length($text));
    , elle appartient à un module que j'utilise pour mes calculs (j'ai du mal m'exprimer)

    Pour être précis, je me sers de modules perl qui pilotent un logiciel de calcul GPS. Mais ces modules ce n'est pas moi qui les ai écrit et il n'est vraiment pas conseillé de les modifier. Ce que je voudrais c'est juste récupérer sur mon widget text le texte renvoyé par ces modules et notamment par la ligne de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    syswrite(STDOUT,$text,length($text));
    .
    C'est pour ça que j'ai redirigé la sortie standard...

    Merci de ta patience Djibril

  17. #17
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Je vais essayer de résumé où on en est.
    Si tu ne mets pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tie *STDOUT, ref $TonWidgetText, $TonWidgetText;
    , ton script fonctionne maintenant correctement. Le seul problème est que tu as la sortie standard sur la console Dos.

    Si tu rajoutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tie *STDOUT, ref $TonWidgetText, $TonWidgetText;
    tu as un message d'erreur?
    As tu bien écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ref $TonWidgetText, $TonWidgetText;
    ?

  18. #18
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    C'est bien ça, avec l'erreur précédemment citée.

  19. #19
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Voici une solution que je viens de tester et qui fonctionne très bien.

    Tu redirige le STDOUT vers un fichier .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open ( STDOUT, ">fichierLog.log");
    Et pour récupérer le tout, tu fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    use Tk::TextUndo;
     
    my $text= $Fenetre->TextUndo(
         ....
        )->pack;
     
     
    $text->Load("fichierLog.log");
    Voilà, et tout est OK

  20. #20
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Le problème c'est que je voulais afficher le rapport de calcul en temps réel... pour que l'utilisateur puisse suivre le déroulement...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Probleme d'affichage de certaines fenêtre
    Par alex8276 dans le forum Linux
    Réponses: 0
    Dernier message: 17/04/2014, 23h48
  2. Thread et affichage de la fenêtre principale
    Par djiga4me dans le forum Langage
    Réponses: 1
    Dernier message: 16/08/2010, 05h34
  3. [C# et WPF] - Probleme affichage fenêtre
    Par NeoKript dans le forum C#
    Réponses: 4
    Dernier message: 26/11/2009, 22h11
  4. Forcer l'affichage de la fenêtre principale d'un processus
    Par StormimOn dans le forum Windows Forms
    Réponses: 6
    Dernier message: 27/08/2009, 19h47
  5. Fenêtre principale et secondaire
    Par FranT dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/07/2002, 20h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo