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

GUI Python Discussion :

En essayant d'afficher une deuxième figure, une fenêtre tkinter vide s'affiche


Sujet :

GUI Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 61
    Par défaut En essayant d'afficher une deuxième figure, une fenêtre tkinter vide s'affiche
    Bonjour,

    Je suis en train de développer une interface graphique qui contient 4 tabs. Chaque tab contient un bouton qu'en cliquant affiche un graphe avec matplotlib. Le graphe peut afficher un plot ou plusieurs plots. Pour l'instant, je peux afficher plusieurs plots et je peux contrôler l'interface du graphe (fermer, zoomer, ...). Voici un extrait de code :

    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
     
     
                fig = plt.figure(self.numFiguresPlot2_1) 
                fig.canvas.set_window_title(self.DropDownListDisplaySector2_1.currentText())
     
                x = np.arange(0, self.stockParam.nTotZones, 1)
                y = pd.to_numeric(matrix4["Price"])
                print("Moyenne = ")
                print(y.mean(0))
                z = pd.to_numeric(matrix4["Adjust"]*y)/100 + y
     
                # plot data
                if(firstPlot):
                    price = plt.plot(x, y, label = ("Price"))
                shadowPrice = plt.plot(x, z, label = ("Price + adjust for iteration "+self.DropDownListDisplayIter2_1.currentText()))
     
     
                plt.ion()
                plt.legend() 
                draw_thread = threading.Thread(target=plt.show)  
                draw_thread.start()
     
                plt.ioff()
    Mon problème est que quand je ferme la première fenêtre du graphe et quand j'essaie d'afficher une deuxième fenêtre du graphe, une fenêtre vide tkinter s'affiche. Je ne comprends pas ce problème.

    Des pistes svp ?

    Merc.

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Pour moi, ça signifie que tkinter crée une nouvelle fenêtre car la fenêtre root Tk n'existe pas ou il ne la trouve pas.

    Un peu comme quand on crée un widget sans définir le parent dans une console,python tkinter crée une fenêtre vide.

    Maintenant pour résoudre le problème, je ne sais pas, je ne connais pas matplotlib, faut voir ce que show accepte en paramètre

  3. #3
    Membre confirmé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 61
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Pour moi, ça signifie que tkinter crée une nouvelle fenêtre car la fenêtre root Tk n'existe pas ou il ne la trouve pas.

    Un peu comme quand on crée un widget sans définir le parent dans une console,python tkinter crée une fenêtre vide.

    Maintenant pour résoudre le problème, je ne sais pas, je ne connais pas matplotlib, faut voir ce que show accepte en paramètre
    Bonjour,

    show accepte juste un paramètre block qui peut être True ou False. "In non-interactive mode, display all figures and block until the figures have been closed; in interactive mode it has no effect unless figures were created prior to a change from non-interactive to interactive mode (not recommended). In that case it displays the figures but does not block.

    A single experimental keyword argument, block, may be set to True or False to override the blocking behavior described above."

  4. #4
    Membre confirmé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 61
    Par défaut Solution
    import matplotlib
    matplotlib.use('Qt4Agg')

    et dans la fonction de plot :

    plt.legend()
    plt.draw()
    plt.show(block=False)

  5. #5
    Membre confirmé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 61
    Par défaut Un autre problème en intégrant ce plugin dans QGIS
    Bonjour,

    En essayant d'intégrer ce plugin dans QGIS, j'ai eu cette erreur :

    Exception in thread Thread-1:
    Traceback (most recent call last):
    File "C:\OSGEO4~1\apps\Python27\lib\threading.py", line 808, in __bootstrap_inner
    self.run()
    File "C:\OSGEO4~1\apps\Python27\lib\threading.py", line 761, in run
    self.__target(*self.__args, **self.__kwargs)
    File "C:\OSGEO4~1\apps\Python27\lib\site-packages\matplotlib\pyplot.py", line 253, in show
    return _show(*args, **kw)
    File "C:\OSGEO4~1\apps\Python27\lib\site-packages\matplotlib\backend_bases.py", line 193, in __call__
    self.mainloop()
    File "C:\OSGEO4~1\apps\Python27\lib\site-packages\matplotlib\backends\backend_qt5.py", line 150, in mainloop
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    ValueError: signal only works in main thread

    Des pistes svp ?

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/03/2011, 11h52
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 13h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 14h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 14h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 14h48

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