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
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 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)
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 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 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
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_())
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 cerveauje vous en serais reconnaissant.
Bonne journée à tous
Partager