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

PyQt Python Discussion :

Gestion de fenêtre pop-up


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Par défaut Gestion de fenêtre pop-up
    Bonjour à tous,

    Je cherche à faire une fenêtre principale qui lorsque je clique sur un bouton, déclencherais l'ouverture d'une autre fenêtre dans laquelle je pourrais récupérer les valeurs écrites dans des QTextEdit. Je vous mets ci-dessous le code que j'utilise pour le moment.

    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
    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
    from PyQt5.QtWidgets import QMainWindow, QWidget, QApplication, QFileDialog, QTextEdit, QTableWidgetItem, QDialog
    from PyQt5 import uic, QtGui, QtCore
    import pickle
     
     
    ### Import du module pour l'affichage des graphs ##############################
    import pyqtgraph as pg
     
    class MainWindowOPO(QMainWindow):
     
        def __init__(self, parent = None):
     
            ### Portion du code qui permet de convertir l'interface .ui de QtDesigner en .py
            super().__init__()
            uic.loadUi(__file__.split('.py')[0] + '.ui', self)
            ################################################################################ 
     
            self.pushButtonPivotal.clicked.connect(self.onPushButtonPivotal)
            ###################################################################################
     
        def onPushButtonPivotal(self):   ### Procedure pour pivoter une courbe entre deux points (regression lineaire pour avoir les deux points a zero)
            self.pivotalWindow = PopUpPivotal()
            self.pivotalWindow.setWindowModality(QtCore.Qt.ApplicationModal)
            self.pivotalWindow.show()                      
     
    ###################################################################################################
    class PopUpPivotal(QDialog):
     
        def __init__(self, parent = None):
                super().__init__()
                uic.loadUi(__file__.split('.py')[0] + '.ui', self)
     
                self.pushButtonPivotal.clicked.connect(self.onPushButtonPivotal) 
     
     
        def onPushButtonPivotal(self):
     
            with open(self.loaded_filename,'rb') as file:
                data = pickle.load(file)
     
                print(data)
                self.close() 
     
     
     
        #############################################################################################        
     
    ### Code minimal pour afficher l'interface graphique        
    if __name__.endswith('__main__'):
     
        if not QApplication.instance():
            MainApp = QApplication(sys.argv)
        else :
            MainApp = QApplication.instance()
     
    mainWindow = MainWindowOPO()
    mainWindow.show()
     
    rc = MainApp.exec_()
    sys.exit(rc)
     
    ##################################

    En executant ce code , ca ne marche pas et j 'ai le message d'erreur suivant :
    TypeError: ('Wrong base class of toplevel widget', (<class '__main__.PopUpPivotal'>, 'QMainWindow')).
    J'ai essayé de changer le type de PopUpPivotal en mettant QWidget ou QMainWindow mais j'ai toujours ce message d'erreur et je n'arrive pas à comprendre d'où vient mon erreur. Quelqu'un aurait une idée pour m'aiguiller ?

    Merci d'avance pour votre aide !

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    J'ai l'impression que tu charges deux fois la même chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            uic.loadUi(__file__.split('.py')[0] + '.ui', self)
    le fichier .ui du QDialog devrait avoir un autre nom que celui de la fenêtre principale, non ?

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'ai modifié et simplifié le code proposé, qui fonctionne sans erreur:

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    import sys
    from PyQt5.QtWidgets import (QMainWindow, QWidget, QApplication, QFileDialog, 
                        QTextEdit, QTableWidgetItem, QDialog, QPushButton)
    from PyQt5 import QtGui, QtCore
     
    ##############################################################################
    class MainWindowOPO(QMainWindow):
     
        #=========================================================================
        def __init__(self, parent = None):
            super().__init__(parent)
     
            self.pushButtonPivotal = QPushButton("Appel du popup", self)
            self.pushButtonPivotal.clicked.connect(self.onPushButtonPivotal)
     
        #=========================================================================
        def onPushButtonPivotal(self):   ### Procedure pour pivoter une courbe entre deux points (regression lineaire pour avoir les deux points a zero)
            self.pivotalWindow = PopUpPivotal()
            self.pivotalWindow.setWindowModality(QtCore.Qt.ApplicationModal)
            self.pivotalWindow.exec_()                     
     
    ##############################################################################
    class PopUpPivotal(QDialog):
     
        #=========================================================================
        def __init__(self, parent = None):
            super().__init__(parent)
     
            self.pushButtonPivotal = QPushButton("Enregistrer les datas", self)
            self.pushButtonPivotal.clicked.connect(self.onPushButtonPivotal)
     
        #=========================================================================
        def onPushButtonPivotal(self):
     
            #with open(self.loaded_filename,'rb') as file:
            #    data = pickle.load(file)
     
            print("data")
            self.close() 
     
    ##############################################################################
    if __name__.endswith('__main__'):
     
        MainApp = QApplication(sys.argv)
     
        mainWindow = MainWindowOPO()
        mainWindow.show()
     
        rc = MainApp.exec_()
        sys.exit(rc)
    Comme VinsS, j'ai été surpris de voir que le même fichier issu de QtDesigner était chargé dans deux classes différentes.

    A noter que la fenêtre QDialog a une particularité: elle a une pile de traitement des évènements séparée, qui est est installée avec ".exec_".

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Par défaut
    Merci à vous deux, je pense avoir compris d'où vient mon soucis. Je fait mes fenêtres avec Qt Designer et la ligne mis en avant par VinsS sert à transformer au moment du lancement du programme les fichiers .ui en .py. Je vais essayé de faire autrement, cela devrait fonctionner ! Merci encore !

Discussions similaires

  1. [Swing] Fenêtre pop-up
    Par Invité dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 28/02/2006, 21h42
  2. Fenêtre pop-up
    Par MYster dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 14/11/2005, 21h43
  3. Ouvrir une fenêtre pop up en plus d'une page normale
    Par Satination dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 17/08/2005, 10h28
  4. problème de gestion de fenêtre
    Par clemsouz dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/11/2004, 14h35
  5. [Tcl/Tk] Gestion de fenêtre
    Par HRS dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 28/08/2004, 21h27

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