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 :

PYQT gestion QMenu et des évènements


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2022
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2022
    Messages : 14
    Par défaut 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 : 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
     
    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 : 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 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

  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,

    Toujours conserver une référence de ses widgets !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        def prog1UI(self):
            self.prog1 = Ui_Form()
            self.prog1.setupUi(self.page1)

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2022
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2022
    Messages : 14
    Par défaut
    [QUOTE=VinsS;11831151]Salut,

    Toujours conserver une référence de ses widgets !

    Merci VinS
    merci pour ce retour, je me doutais que c'était tout con, mais j'ai pourtant chercher pas mal de temps sans trouver. Je vais maintenant le tester sur mon projet en "vrai"
    JefMiss

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

Discussions similaires

  1. [XML] [EXPAT] xml_parse et la gestion des événements...
    Par Herode dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 05/02/2006, 20h59
  2. Gestion des évènements Netscape 7.0
    Par RATHQUEBER dans le forum Autres langages pour le Web
    Réponses: 6
    Dernier message: 19/12/2005, 16h26
  3. Problème avec la gestion des événements
    Par CynO dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 10h07
  4. [JTable] gestion des événements
    Par soulhouf dans le forum Composants
    Réponses: 4
    Dernier message: 19/08/2005, 13h21
  5. Gestion des évènements lors d'un clique sur une image.
    Par yoghisan dans le forum Débuter
    Réponses: 7
    Dernier message: 23/06/2005, 19h04

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