PYQT gestion QMenu et des évènements
Bonjour,
J'ai un projet qui me semble assez standard, mais quelque chose cloche que je n'arrive pas à résoudre.
L'idée est d'avoir une page principale QMainWindow avec un menu qui peut m'ouvrir différents formulaires sur la page principale. Pour ce faire, j'utilise le widget QStackedWidget qui me semble bien approprié pour cela. Visuellement tout se passe bien en cliquant sur le menu, j'ai bien le formulaire qui apparaît. Mon soucis est que lorsque je mets un widget qui entraîne un évènement type QPushButton le signal ne semble pas fonctionner.
J'ai reproduit ci-dessous en simplifiant au max la situation de test : un menu qui peut ouvrir la page 1 ou la page 2 et sur la page 1 il y a un bouton qui modifie le label qui est sur la page.
Une dernière précision, pour une bonne gestion de mon code, le contenu qui est sur la page 1 est géré par une classe à part et c'est là que j'ai un disfonctionnement.
Voici le code pour ma MainWindow :
Code:
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
|
from PyQt5 import QtCore, QtWidgets
from programm1Bis import Ui_Form
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(561, 351)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.Page_widget = QtWidgets.QStackedWidget(self.centralwidget)
self.Page_widget.setGeometry(QtCore.QRect(0, 20, 511, 291))
self.Page_widget.setObjectName("Page_widget")
self.page1 = QtWidgets.QWidget()
self.page1.setObjectName("page1")
self.Page_widget.addWidget(self.page1)
self.page2 = QtWidgets.QWidget()
self.page2.setObjectName("page2")
self.Page_widget.addWidget(self.page2)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 561, 22))
self.menubar.setObjectName("menubar")
self.menuprogramme = QtWidgets.QMenu(self.menubar)
self.menuprogramme.setObjectName("menuprogramme")
MainWindow.setMenuBar(self.menubar)
self.actionprog1 = QtWidgets.QAction(MainWindow)
self.actionprog1.setObjectName("actionprog1")
self.actionprog2 = QtWidgets.QAction(MainWindow)
self.actionprog2.setObjectName("actionprog_2")
self.menuprogramme.addAction(self.actionprog1)
self.menuprogramme.addAction(self.actionprog2)
self.menubar.addAction(self.menuprogramme.menuAction())
self.retranslateUi(MainWindow)
self.Page_widget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.prog1UI()
self.prog2UI()
self.actionprog1.triggered.connect(lambda : self.display(0))
self.actionprog2.triggered.connect(lambda : self.display(1))
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.menuprogramme.setTitle(_translate("MainWindow", "programme"))
self.actionprog1.setText(_translate("MainWindow", "prog1"))
self.actionprog2.setText(_translate("MainWindow", "prog2"))
def prog1UI(self):
prog1 = Ui_Form()
prog1.setupUi(self.page1)
def prog2UI(self):
layout = QtWidgets.QHBoxLayout()
label2 = QtWidgets.QLabel()
layout.addWidget(label2)
label2.setText("PAGE 2")
self.page2.setLayout(layout)
def display(self, i):
self.Page_widget.setCurrentIndex(i) |
et le code pour l'affichage de la page 1 :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
from PyQt5 import QtWidgets, QtCore
class Ui_Form(object):
def setupUi(self, Form=None):
self.verticalLayout = QtWidgets.QVBoxLayout(Form)
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setText("appuyer")
self.verticalLayout.addWidget(self.pushButton)
self.label = QtWidgets.QLabel(Form)
self.label.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop)
self.label.setText("Ceci est le programme 1")
self.verticalLayout.addWidget(self.label)
print("ok")
self.pushButton.clicked.connect(self.test)
print("okBis")
def test(self):
if self.label.text() == "Ceci est le programme 1":
self.label.setText("on change de texte")
else:
self.label.setText("Ceci est le programme 1") |
Merci pour vos retours
JefMiss