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 :

Signaux et slots entre deux classes dans deux fichiers


Sujet :

PyQt Python

  1. #1
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 314
    Points : 204
    Points
    204
    Par défaut Signaux et slots entre deux classes dans deux fichiers
    Bonjour à tous,

    Je tente vainement de me construire une petite application (Pour tester Python) et je me heurte à une difficulté.
    Le principe : Je dispose de trois fenêtres contenant chacune des formulaires.

    Mon fichier App _start crée une instance de la classe MainWindowTestFen qui elle même hérite de la première fenêtre.

    Mes signaux passent bien de ma première fenêtre à MainWindowTestFen. Par ailleurs, je peux à partir de ma première fenêtre ouvrir une seconde.

    C'est là que les choses se compliquent. Je n'arrive pas à récupérer les évènements de la seconde fenêtres.

    Depuis deux jours je tourne en rond et n'y arrive pas. Je dois louper un truc dans la logique.

    Je vous mets ci-dessous les différents éléments.

    Fichier App_Start.py
    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
    import sys
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtCore import QTranslator
    from main_window_TestFen import MainWindowTestFen
     
    app = QApplication(sys.argv)
     
    translator = QTranslator()
    translator.load("testFen en")
    app.installTranslator(translator)
     
    mainWindowTestFen = MainWindowTestFen()
    mainWindowTestFen.show()
     
    rc = app.exec_()
    sys.exit(rc)
    Le fichier main_window_TestFen.py
    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
    from PyQt5.QtWidgets import QMainWindow, QFileDialog
    from PyQt5.QtCore import pyqtSlot
    from Fenetres.FirstWindow import Ui_FirstWindow
    from Fenetres.SecondWindow import Ui_SecondWindow
     
    class MainWindowTestFen(Ui_FirstWindow, QMainWindow):
        def __init__(self, parent=None):
            super(MainWindowTestFen, self).__init__(parent)
            self.setupUi(self)
     
        @pyqtSlot()
        def on_pushButtonDossier_clicked(self):
            rep = str(QFileDialog.getExistingDirectory(self, "Sélectionnez un dossier a examiner"))
            if rep:
                self.plainTextEditRecap.appendPlainText('Dossier examiné : ' + rep )
     
        @pyqtSlot()
        def on_pushButtonDestination_clicked(self):
            repDest =str(QFileDialog.getExistingDirectory(self, "Choississez un répertoire de destination"))
            if repDest:
                self.plainTextEditRecap.appendPlainText('Dossier de destination: ' + repDest  )
     
        @pyqtSlot()
        def on_pushButtonFormat_clicked(self):
            self.window = QMainWindow()
            self.uiFor = Ui_SecondWindow()
            self.uiFor.setupUi(self.window)
            self.window.show()
     
        @pyqtSlot()
        def on_pushbutton2W_clicked(self):
            print("Bouton 'valide' actionné")
    Ma première fenêtre générée avec QtDesigner :
    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
    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
    89
    90
    91
    92
    93
    from PyQt5 import QtCore, QtGui, QtWidgets
    from Fenetres.SecondWindow import Ui_SecondWindow
    from PyQt5.QtCore import pyqtSlot
     
     
    class Ui_FirstWindow(object):
        def setupUi(self, FirstWindow):
            FirstWindow.setObjectName("FirstWindow")
            FirstWindow.resize(817, 618)
            self.centralwidget = QtWidgets.QWidget(FirstWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
            self.gridLayout.setObjectName("gridLayout")
            self.verticalLayout = QtWidgets.QVBoxLayout()
            self.verticalLayout.setObjectName("verticalLayout")
            spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
            self.verticalLayout.addItem(spacerItem)
            self.horizontalLayout = QtWidgets.QHBoxLayout()
            self.horizontalLayout.setObjectName("horizontalLayout")
            spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem1)
            self.pushButtonDossier = QtWidgets.QPushButton(self.centralwidget)
            self.pushButtonDossier.setObjectName("pushButtonDossier")
            self.horizontalLayout.addWidget(self.pushButtonDossier)
            spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem2)
            self.pushButtonFormat = QtWidgets.QPushButton(self.centralwidget)
            self.pushButtonFormat.setObjectName("pushButtonFormat")
            self.horizontalLayout.addWidget(self.pushButtonFormat)
            spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem3)
            self.pushButtonMeta = QtWidgets.QPushButton(self.centralwidget)
            self.pushButtonMeta.setObjectName("pushButtonMeta")
            self.horizontalLayout.addWidget(self.pushButtonMeta)
            spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem4)
            self.verticalLayout.addLayout(self.horizontalLayout)
            spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
            self.verticalLayout.addItem(spacerItem5)
            self.plainTextEditRecap = QtWidgets.QPlainTextEdit(self.centralwidget)
            self.plainTextEditRecap.setObjectName("plainTextEditRecap")
            self.verticalLayout.addWidget(self.plainTextEditRecap)
            spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
            self.verticalLayout.addItem(spacerItem6)
            self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
            self.horizontalLayout_2.setObjectName("horizontalLayout_2")
            spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout_2.addItem(spacerItem7)
            self.pushButtonDestination = QtWidgets.QPushButton(self.centralwidget)
            self.pushButtonDestination.setObjectName("pushButtonDestination")
            self.horizontalLayout_2.addWidget(self.pushButtonDestination)
            spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout_2.addItem(spacerItem8)
            self.pushButtonExport = QtWidgets.QPushButton(self.centralwidget)
            self.pushButtonExport.setObjectName("pushButtonExport")
            self.horizontalLayout_2.addWidget(self.pushButtonExport)
            spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout_2.addItem(spacerItem9)
            self.verticalLayout.addLayout(self.horizontalLayout_2)
            spacerItem10 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
            self.verticalLayout.addItem(spacerItem10)
            self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)
            FirstWindow.setCentralWidget(self.centralwidget)
            self.menubar = QtWidgets.QMenuBar(FirstWindow)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 817, 21))
            self.menubar.setObjectName("menubar")
            FirstWindow.setMenuBar(self.menubar)
            self.statusbar = QtWidgets.QStatusBar(FirstWindow)
            self.statusbar.setObjectName("statusbar")
            FirstWindow.setStatusBar(self.statusbar)
     
            self.retranslateUi(FirstWindow)
            QtCore.QMetaObject.connectSlotsByName(FirstWindow)
     
        def retranslateUi(self, FirstWindow):
            _translate = QtCore.QCoreApplication.translate
            FirstWindow.setWindowTitle(_translate("FirstWindow", "First Window"))
            self.pushButtonDossier.setText(_translate("FirstWindow", "Choix du Dossier"))
            self.pushButtonFormat.setText(_translate("FirstWindow", "Sélection des formats"))
            self.pushButtonMeta.setText(_translate("FirstWindow", "Sélection des Meta"))
            self.pushButtonDestination.setText(_translate("FirstWindow", "Destination"))
            self.pushButtonExport.setText(_translate("FirstWindow", "Exporter"))
     
     
     
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        FirstWindow = QtWidgets.QMainWindow()
        ui = Ui_FirstWindow()
        ui.setupUi(FirstWindow)
        FirstWindow.show()
        sys.exit(app.exec_())
    Ma seconde fenêtre générée aussi avec QtDesigner
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    from PyQt5 import QtCore, QtGui, QtWidgets
     
    class Ui_SecondWindow(object):
        def setupUi(self, SecondWindow):
            SecondWindow.setObjectName("SecondWindow")
            SecondWindow.resize(756, 394)
            SecondWindow.setFocusPolicy(QtCore.Qt.NoFocus)
            self.centralwidget = QtWidgets.QWidget(SecondWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.widget = QtWidgets.QWidget(self.centralwidget)
            self.widget.setGeometry(QtCore.QRect(240, 80, 289, 173))
            self.widget.setObjectName("widget")
            self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
            self.verticalLayout.setContentsMargins(0, 0, 0, 0)
            self.verticalLayout.setObjectName("verticalLayout")
            self.horizontalLayout = QtWidgets.QHBoxLayout()
            self.horizontalLayout.setObjectName("horizontalLayout")
            spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem)
            self.label2W = QtWidgets.QLabel(self.widget)
            self.label2W.setObjectName("label2W")
            self.horizontalLayout.addWidget(self.label2W)
            self.lineEdit2W = QtWidgets.QLineEdit(self.widget)
            self.lineEdit2W.setObjectName("lineEdit2W")
            self.horizontalLayout.addWidget(self.lineEdit2W)
            spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem1)
            self.verticalLayout.addLayout(self.horizontalLayout)
            spacerItem2 = QtWidgets.QSpacerItem(20, 18, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
            self.verticalLayout.addItem(spacerItem2)
            self.checkBox2W = QtWidgets.QCheckBox(self.widget)
            self.checkBox2W.setObjectName("checkBox2W")
            self.verticalLayout.addWidget(self.checkBox2W)
            spacerItem3 = QtWidgets.QSpacerItem(20, 18, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
            self.verticalLayout.addItem(spacerItem3)
            self.radioButton2W = QtWidgets.QRadioButton(self.widget)
            self.radioButton2W.setObjectName("radioButton2W")
            self.verticalLayout.addWidget(self.radioButton2W)
            spacerItem4 = QtWidgets.QSpacerItem(20, 18, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
            self.verticalLayout.addItem(spacerItem4)
            self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
            self.horizontalLayout_2.setObjectName("horizontalLayout_2")
            spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout_2.addItem(spacerItem5)
            self.pushButton2W = QtWidgets.QPushButton(self.widget)
            self.pushButton2W.setObjectName("pushButton2W")
            self.horizontalLayout_2.addWidget(self.pushButton2W)
            spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout_2.addItem(spacerItem6)
            self.verticalLayout.addLayout(self.horizontalLayout_2)
            SecondWindow.setCentralWidget(self.centralwidget)
            self.menubar = QtWidgets.QMenuBar(SecondWindow)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 756, 21))
            self.menubar.setObjectName("menubar")
            SecondWindow.setMenuBar(self.menubar)
            self.statusbar = QtWidgets.QStatusBar(SecondWindow)
            self.statusbar.setObjectName("statusbar")
            SecondWindow.setStatusBar(self.statusbar)
     
            self.retranslateUi(SecondWindow)
            QtCore.QMetaObject.connectSlotsByName(SecondWindow)
     
            self.pushButton2W.clicked.connect(self.on_button_clicked)
     
        def retranslateUi(self, SecondWindow):
            _translate = QtCore.QCoreApplication.translate
            SecondWindow.setWindowTitle(_translate("SecondWindow", "Second Window"))
            self.label2W.setText(_translate("SecondWindow", "Du Texte : "))
            self.checkBox2W.setText(_translate("SecondWindow", "CheckBox de la 2nd Fenêtre"))
            self.radioButton2W.setText(_translate("SecondWindow", "Bouton radio 2nd Fenêtre"))
            self.pushButton2W.setText(_translate("SecondWindow", "Valider"))
     
     
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        SecondWindow = QtWidgets.QMainWindow()
        ui = Ui_SecondWindow()
        ui.setupUi(SecondWindow)
        SecondWindow.show()
        sys.exit(app.exec_())

    Si vous avez de quoi débloquer mon cerveau je vous en serais reconnaissant.

    Bonne journée à tous

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Salut,

    Je n'ai jamais obtenu quelque chose de clair avec ce pyqtSlot, donc j'ai pris l'habitude de connecter moi-même mes signaux.

    Comme ceci, ça ira mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class MainWindowTestFen(Ui_FirstWindow, QMainWindow):
        def __init__(self, parent=None):
            super(MainWindowTestFen, self).__init__(parent)
            self.setupUi(self)
            self.pushButtonDossier.clicked.connect(self.on_pushButtonDossier_clicked)
            self.pushButtonDestination.clicked.connect(self.on_pushButtonDestination_clicked)
            etc ...
    Et supprime les decorateurs @pyqtSlot.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 163
    Points
    163
    Par défaut
    Euh...Je ne peux pas tester car je n'ai pas installé PyQt, mais ça fonctionne peut-être aussi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def on_pushButtonFormat_clicked(self):
            self.window = QMainWindow()
            self.uiFor = Ui_SecondWindow()
            self.Bind(TON_EVENT, self.uiFor.CatchEvent, self.ObjetDeclencheur) #On ajoute cette ligne
            self.uiFor.setupUi(self.window)
            self.window.show()
     
    #A mettre dans la class de la seconde fenetre !!!
    def CatchEvent(self,evt):
    #Bah là tu fais ce que tu veux hein....
        evt.Skip()
    Rien de sûr...

  4. #4
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 314
    Points : 204
    Points
    204
    Par défaut
    Merci VincS,

    merci du conseil, Je vais modifier les choses sans les PySlot. Mais en fait là n'était pas mon problème car j'arrivais à faire fonctionner les process avec les PySlot.

    En fait, à partir de mon fichier main_window_TestFen, je peux ouvrir FirstWindow et faire les traitements sur "PushButtonDOssier" et "pushButtonDestination".

    Lorsque je clique sur "PushButtonFormat" ma second fenêtre venant de SecondWindow.py s'ouvre bien. Mais je n'arrive pas à créer une gestion d'évènement via "connect" ou PySlot qui permette de répondre au pushButton2W
    de la seconde fenêtre pour qu'elle transmette les informations contenu dans son formulaire et qu'elle se ferme.

    Faut-il que ma classe MainWindowTestFen hérite aussi de Ui_SecondWindow.

    En d'autres termes lorsque l'on crée une application avec de multiples fenêtres, faut-il que la fenêtre principale hérite de toutes les autres (Là j'ai l'impression de dire une C........)

    Je ne sais pas si je suis vraiment clair.

  5. #5
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 314
    Points : 204
    Points
    204
    Par défaut
    Re salut,

    Nos messages se sont croisés. Merci pour ta proposition, je vais voir si cela fonctionne.

    Par contre, j'ai fait une chose qui fonctionne, mais je crains que cela soit un peu lourd.

    Je fais hériter ma classe FirstWindow de la classe SecondWindow. Dans le constructeur, je rajourte ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    self.window = QMainWindow()
    self.uiFor = Ui_SecondWindow()
    self.uiFor.setupUi(self.window)
     
    self.pushButtonFormat.clicked.connect(self.pushButtonFormat_clicked)
    self.uiFor.pushButton2W.clicked.connect(self.on_button_clicked)

    j'ai du coup deux méthodes dans cette classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        def pushButtonFormat_clicked(self):
            self.window.show()
     
        def on_button_clicked(self):
            cb = self.uiFor.checkBox2W.isChecked()
            br = self.uiFor.radioButton2W.isChecked()
            le = self.uiFor.lineEdit2W.text()
            self.red = {'cb': cb, 'br': br, 'le': le}
            print(self.red)
            self.window.close()


    Mais j'en reviens à ma question précédente : Est-ce bien judicieux de faire hériter ma classe FirestWindow de toutes les classes 'fenêtres' qu'elle est sencée ouvrir ?


    Je mets en dessous les deux fichiers modifiés. :

    MainWindowTestFen
    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
    from PyQt5.QtWidgets import QMainWindow, QFileDialog
    from PyQt5.QtCore import pyqtSlot
    from Fenetres.FirstWindow import Ui_FirstWindow
     
     
    class MainWindowTestFen(Ui_FirstWindow, QMainWindow):
        def __init__(self, parent=None):
            super(MainWindowTestFen, self).__init__(parent)
            self.setupUi(self)
            self.pushButtonDossier.clicked.connect(self.pushButtonDossier_clicked)
            self.pushButtonDestination.clicked.connect(self.pushButtonDestination_clicked)
            self.pushButtonFormat.clicked.connect(self.pushButtonFormat_clicked)
     
        def pushButtonDossier_clicked(self):
            rep = str(QFileDialog.getExistingDirectory(self, "Sélectionnez un dossier a examiner"))
            if rep:
                self.plainTextEditRecap.appendPlainText('Dossier examiné : ' + rep )
     
        def pushButtonDestination_clicked(self):
            repDest =str(QFileDialog.getExistingDirectory(self, "Choississez un répertoire de destination"))
            if repDest:
                self.plainTextEditRecap.appendPlainText('Dossier de destination: ' + repDest  )
    FirstWindow
    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
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.QtWidgets import QMainWindow
    from Fenetres.SecondWindow import Ui_SecondWindow
    from PyQt5.QtCore import pyqtSlot
     
     
    class Ui_FirstWindow(Ui_SecondWindow):
        def __init__(self, parent = None):
            super(Ui_FirstWindow, self).__init__(parent)
            self.setupUi(self)
     
            self.window = QMainWindow()
            self.uiFor = Ui_SecondWindow()
            self.uiFor.setupUi(self.window)
     
            self.pushButtonFormat.clicked.connect(self.pushButtonFormat_clicked)
     
            self.uiFor.pushButton2W.clicked.connect(self.on_button_clicked)
     
        def setupUi(self, FirstWindow):
            FirstWindow.setObjectName("FirstWindow")
            FirstWindow.resize(817, 618)
            self.centralwidget = QtWidgets.QWidget(FirstWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
            self.gridLayout.setObjectName("gridLayout")
            self.verticalLayout = QtWidgets.QVBoxLayout()
            self.verticalLayout.setObjectName("verticalLayout")
            spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
            self.verticalLayout.addItem(spacerItem)
            self.horizontalLayout = QtWidgets.QHBoxLayout()
            self.horizontalLayout.setObjectName("horizontalLayout")
            spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem1)
            self.pushButtonDossier = QtWidgets.QPushButton(self.centralwidget)
            self.pushButtonDossier.setObjectName("pushButtonDossier")
            self.horizontalLayout.addWidget(self.pushButtonDossier)
            spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem2)
            self.pushButtonFormat = QtWidgets.QPushButton(self.centralwidget)
            self.pushButtonFormat.setObjectName("pushButtonFormat")
            self.horizontalLayout.addWidget(self.pushButtonFormat)
            spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem3)
            self.pushButtonMeta = QtWidgets.QPushButton(self.centralwidget)
            self.pushButtonMeta.setObjectName("pushButtonMeta")
            self.horizontalLayout.addWidget(self.pushButtonMeta)
            spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem4)
            self.verticalLayout.addLayout(self.horizontalLayout)
            spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
            self.verticalLayout.addItem(spacerItem5)
            self.plainTextEditRecap = QtWidgets.QPlainTextEdit(self.centralwidget)
            self.plainTextEditRecap.setObjectName("plainTextEditRecap")
            self.verticalLayout.addWidget(self.plainTextEditRecap)
            spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
            self.verticalLayout.addItem(spacerItem6)
            self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
            self.horizontalLayout_2.setObjectName("horizontalLayout_2")
            spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout_2.addItem(spacerItem7)
            self.pushButtonDestination = QtWidgets.QPushButton(self.centralwidget)
            self.pushButtonDestination.setObjectName("pushButtonDestination")
            self.horizontalLayout_2.addWidget(self.pushButtonDestination)
            spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout_2.addItem(spacerItem8)
            self.pushButtonExport = QtWidgets.QPushButton(self.centralwidget)
            self.pushButtonExport.setObjectName("pushButtonExport")
            self.horizontalLayout_2.addWidget(self.pushButtonExport)
            spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout_2.addItem(spacerItem9)
            self.verticalLayout.addLayout(self.horizontalLayout_2)
            spacerItem10 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
            self.verticalLayout.addItem(spacerItem10)
            self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)
            FirstWindow.setCentralWidget(self.centralwidget)
            self.menubar = QtWidgets.QMenuBar(FirstWindow)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 817, 21))
            self.menubar.setObjectName("menubar")
            FirstWindow.setMenuBar(self.menubar)
            self.statusbar = QtWidgets.QStatusBar(FirstWindow)
            self.statusbar.setObjectName("statusbar")
            FirstWindow.setStatusBar(self.statusbar)
     
            self.retranslateUi(FirstWindow)
            QtCore.QMetaObject.connectSlotsByName(FirstWindow)
     
        def retranslateUi(self, FirstWindow):
            _translate = QtCore.QCoreApplication.translate
            FirstWindow.setWindowTitle(_translate("FirstWindow", "First Window"))
            self.pushButtonDossier.setText(_translate("FirstWindow", "Choix du Dossier"))
            self.pushButtonFormat.setText(_translate("FirstWindow", "Sélection des formats"))
            self.pushButtonMeta.setText(_translate("FirstWindow", "Sélection des Meta"))
            self.pushButtonDestination.setText(_translate("FirstWindow", "Destination"))
            self.pushButtonExport.setText(_translate("FirstWindow", "Exporter"))
     
        def pushButtonFormat_clicked(self):
            self.window.show()
     
        def on_button_clicked(self):
            cb = self.uiFor.checkBox2W.isChecked()
            br = self.uiFor.radioButton2W.isChecked()
            le = self.uiFor.lineEdit2W.text()
            self.red = {'cb': cb, 'br': br, 'le': le}
            print(self.red)
            self.window.close()

  6. #6
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Ce n'est pas normal de faire hériter de la seconde fenêtre.
    Celle-ci n'est censée exister que si l'utilisateur la demande et elle sera détruite après fermeture.

    Je reprend ton code de départ qui était bon, il suffit d'y ajouter les connexions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        def on_pushButtonFormat_clicked(self):
            self.window = QMainWindow()
            self.uiFor = Ui_SecondWindow()
            self.uiFor.setupUi(self.window)
            self.uiFor.pushButton2W.clicked.connect(self.on_button2w_clicked)
            self.window.show()
    Ça pourra te mener à une collection de fonction "on_machin_clicked" mais ça n'a aucune importance, c'est la pratique courante et on se complique souvent la vie en voulant limiter ses fonctions.

  7. #7
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 314
    Points : 204
    Points
    204
    Par défaut
    Je te remercie VinSs pour tes conseils.

    Je vais orienté ma réflexion en ce sens.

    Je reviens si j'ai un problème.

    Bonne journée

Discussions similaires

  1. utilisation d'un NotifyIcon dans deux class
    Par Woodone dans le forum ASP.NET
    Réponses: 1
    Dernier message: 13/01/2010, 09h03
  2. Pb d'import de classes dans deux projets différents
    Par SOA_j2EE dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 04/12/2009, 00h20
  3. Utilisation d'un tableau dans deux classes
    Par Yokooo dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 30/07/2009, 16h41
  4. Réponses: 2
    Dernier message: 26/05/2009, 11h52
  5. [css]problème d'attribution de classe dans deux listes
    Par Mitaka dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 24/11/2005, 18h05

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