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 :

pyqt4, mainwindow,menubar: basculer les menus


Sujet :

PyQt Python

  1. #1
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut pyqt4, mainwindow,menubar: basculer les menus
    salut,

    dans une petite application, j'ai crée une fenêtre avec menubar et menus, parmi les menus crées le menu :réalisation qui a deux sous menu: trimestre, année.
    quand je clique sur chaque sous menu, des widgets vont apparaitre.

    ma question est:

    Comment je peux basculer entre l'affichage de chaque sous menu ? la bibliothèque pyqt4
    autrement quand je clic sur trimestre, il affiche des widgets, je clic après sur année autres widgets sont affichés et les premiers sont disparu.


    j'ai déjà fait ça par la bibliothèque Tkinter comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def exeT(self):
            self.switch_to(self.frame1)
        def exeA(self):
            self.switch_to(self.frame2)
        def switch_to(self,content):
            for widget in self.winfo_children():
                widget.pack_forget()
            content.pack(expand=1,fill=BOTH,in_=self,pady=25,padx=5)
    mais avec pyqt4, je n'ai sais pas comment peut on le gére?

    merci de votre aide ou indication.

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par noramokh Voir le message
    salut,

    dans une petite application, j'ai crée une fenêtre avec menubar et menus, parmi les menus crées le menu :réalisation qui a deux sous menu: trimestre, année.
    quand je clique sur chaque sous menu, des widgets vont apparaitre.

    ma question est:

    Comment je peux basculer entre l'affichage de chaque sous menu ?
    Ça, c'est pas difficile, tu déplace le pointeur de la souris vers l'autre sous-menu.

    la bibliothèque pyqt4
    Il manque la suite ?

    autrement quand je clic sur trimestre, il affiche des widgets, je clic après sur année autres widgets sont affichés et les premiers sont disparu.
    Ce ne sont pas les menus qui font disparaître tes widgets, c'est parce que tu l'as écrit ainsi dans ton code.

  3. #3
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Ça, c'est pas difficile, tu déplace le pointeur de la souris vers l'autre sous-menu.


    Il manque la suite ?


    Ce ne sont pas les menus qui font disparaître tes widgets, c'est parce que tu l'as écrit ainsi dans ton code.
    oui je sais que ne sont pas les menus qui font disparaître tes widgets.
    j'ai réussi à faire ça avec Tkinter par la création de la fonction "switch", mais je n'ai aucune idée avec pyqt4.

    voilà le code utilisé pour la question devient plus claire: (j'ai lancé ce code depuis la console python de Qgis 2.0)

    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
    # -*- coding: utf-8 -*-
    from PyQt4 import QtCore, QtGui
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        _fromUtf8 = lambda s: s
     
     
     
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
     
            MainWindow.setObjectName(_fromUtf8("MainWindow"))
            MainWindow.resize(488, 380)
            self.centralwidget = QtGui.QWidget(MainWindow)
            self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
            self.fermer = QtGui.QPushButton(self.centralwidget)
            self.fermer.setGeometry(QtCore.QRect(400, 310, 75, 23))
            self.fermer.setObjectName(_fromUtf8("fermer"))
     
            MainWindow.setCentralWidget(self.centralwidget)
            self.menubar = QtGui.QMenuBar(MainWindow)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 488, 21))
            self.menubar.setObjectName(_fromUtf8("menubar"))
            self.menuEstimation = QtGui.QMenu(self.menubar)
            self.menuEstimation.setObjectName(_fromUtf8("menuEstimation"))
            self.menuPr_vision = QtGui.QMenu(self.menubar)
            self.menuPr_vision.setObjectName(_fromUtf8("menuPr_vision"))
            self.menuR_alisation = QtGui.QMenu(self.menubar)
            self.menuR_alisation.setObjectName(_fromUtf8("menuR_alisation"))
            self.menuAide = QtGui.QMenu(self.menubar)
            self.menuAide.setObjectName(_fromUtf8("menuAide"))
            MainWindow.setMenuBar(self.menubar)
            self.statusbar = QtGui.QStatusBar(MainWindow)
            self.statusbar.setObjectName(_fromUtf8("statusbar"))
            MainWindow.setStatusBar(self.statusbar)
            self.actionTrimestre = QtGui.QAction(MainWindow)
            self.actionTrimestre.setObjectName(_fromUtf8("actionTrimestre"))
            self.actionAnn_e = QtGui.QAction(MainWindow)
            self.actionAnn_e.setObjectName(_fromUtf8("actionAnn_e"))
            self.menuR_alisation.addAction(self.actionTrimestre)
            self.menuR_alisation.addAction(self.actionAnn_e)
            self.menubar.addAction(self.menuEstimation.menuAction())
            self.menubar.addAction(self.menuPr_vision.menuAction())
            self.menubar.addAction(self.menuR_alisation.menuAction())
            self.menubar.addAction(self.menuAide.menuAction())
     
            self.retranslateUi(MainWindow)
            QtCore.QObject.connect(self.fermer, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.close)
            QtCore.QObject.connect(self.actionTrimestre, QtCore.SIGNAL(_fromUtf8("triggered()")), self.afficht)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
            QtCore.QObject.connect(self.actionAnn_e, QtCore.SIGNAL(_fromUtf8("triggered()")), self.afficha)
     
        def retranslateUi(self, MainWindow):
            MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "Les statistiques agricoles des céréales d'hiver : ", None, QtGui.QApplication.UnicodeUTF8))
            self.fermer.setText(QtGui.QApplication.translate("MainWindow", "Fermer", None, QtGui.QApplication.UnicodeUTF8))
            self.menuEstimation.setTitle(QtGui.QApplication.translate("MainWindow", "Estimation", None, QtGui.QApplication.UnicodeUTF8))
            self.menuPr_vision.setTitle(QtGui.QApplication.translate("MainWindow", "Prévision", None, QtGui.QApplication.UnicodeUTF8))
            self.menuR_alisation.setTitle(QtGui.QApplication.translate("MainWindow", "Réalisation", None, QtGui.QApplication.UnicodeUTF8))
            self.menuAide.setTitle(QtGui.QApplication.translate("MainWindow", "Aide", None, QtGui.QApplication.UnicodeUTF8))
            self.actionTrimestre.setText(QtGui.QApplication.translate("MainWindow", "Trimestre", None, QtGui.QApplication.UnicodeUTF8))
            self.actionAnn_e.setText(QtGui.QApplication.translate("MainWindow", "Année", None, QtGui.QApplication.UnicodeUTF8))
     
        def afficht(self):
     
            self.label = QtGui.QLabel(self.centralwidget)
            self.label.setGeometry(QtCore.QRect(10, 20, 71, 16))
            self.label.setObjectName(_fromUtf8("label")) 
            self.label.setText(QtGui.QApplication.translate("MainWindow", "Trimestre : ", None, QtGui.QApplication.UnicodeUTF8))
            self.label.show()
     
        def afficha(self):
     
            self.label = QtGui.QLabel(self.centralwidget)
            self.label.setGeometry(QtCore.QRect(20, 20, 161, 16))
            self.label.setTextFormat(QtCore.Qt.AutoText)
            self.label.setObjectName(_fromUtf8("label"))
            self.label.setText(QtGui.QApplication.translate("MainWindow", "Requête par année agricole ", None, QtGui.QApplication.UnicodeUTF8))
            self.label.show()
     
    MainWindow = QtGui.QMainWindow()
    ui3 = Ui_MainWindow()
    ui3.setupUi(MainWindow)
    MainWindow.show()
    merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut plus "flat".
    Salut,

    tkinter est un peu plus rustique que Qt.
    Dans la pratique, il faut gober beaucoup plus d'abstractions pour comprendre comment arriver à traduire ce qu'on veut et être à l'aise avec la POO, Python,...
    Et comme vous avez survolé tkinter comme le reste, impossible d'avoir construit des bases qui vous permette d'aborder Qt sereinement.

    Essayez de faire quelque chose avec çà (Python2.7):
    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
    from PyQt4.QtGui import QApplication, QListWidget, QWidget, QHBoxLayout, QStackedLayout, QLabel
     
    def create_widget(labels):
     
        def on_click(name):
            print ('on_click: %s' % name)
            w = items.get(name)
            if w: 
                stack.setCurrentWidget(w)
     
        widget = QWidget()
     
        # create selectable widgets
        items = { name : QLabel(text=name, parent=widget) for name in LABELS }
     
        layout = QHBoxLayout()
        widget.setLayout(layout)
        # fake menu
        w = QListWidget(parent=widget)
        w.addItems(items.keys())
        w.itemClicked.connect(lambda item: on_click(unicode(item.text())))
        layout.addWidget(w)
     
        # stack selectable widgets
        stack = QStackedLayout()
        for v in items.values():
            stack.addWidget(v)
        stack.setCurrentIndex(0)
        layout.addLayout(stack)
     
        return widget
     
    if __name__ == '__main__':
        LABELS = [u"semaine", u"mois", u"trimestre" ]
     
        app = QApplication([])
        widget = create_widget(LABELS)
        widget.show()
        app.exec_()
    Pour le reste, bon courage!

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    merci pour votre réponse, je vais faire plus d’effort pour comprendre.

    à+

  6. #6
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    bonjour,

    Wiztricks, j'ai tenté de comprendre ton code et d'appliquer ça sur mon cas mais c'est difficile pour moi.

    dans mon cas quand je clic sur un menu plusieurs widgets sont affichés.
    je n'arrive pas à reformuler mon code.

    merci

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par noramokh Voir le message
    Wiztricks, j'ai tenté de comprendre ton code et d'appliquer ça sur mon cas mais c'est difficile pour moi.

    dans mon cas quand je clic sur un menu plusieurs widgets sont affichés.
    QStackedLayout n'affiche qu'un seul widget à la fois.
    C'est ce qui fait l'intérêt de ce widget layout dans votre cas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    QStackedLayout n'affiche qu'un seul widget à la fois.
    C'est ce qui fait l'intérêt de ce widget dans votre cas.

    - W
    dans mon premier message j'ai mentionné qu'il y a plusieurs widgets à afficher, et le code que j'ai envoyé est simplifié seulement pour vous me comprenez.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par noramokh Voir le message
    dans mon premier message j'ai mentionné qu'il y a plusieurs widgets à afficher, et le code que j'ai envoyé est simplifié seulement pour vous me comprenez.
    J'ai remplacé widget par layout dans le message précédent pour qu'il soit plus clair.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    J'ai remplacé widget par layout dans le message précédent pour qu'il soit plus clair.
    - W
    je suis désolé mais je n'ai pas compris.

    je n'arrive pas à ajouter autre widget.

Discussions similaires

  1. [Flex4] impossible de creer les menus dans un menubar
    Par TOTOTAR dans le forum Flex
    Réponses: 4
    Dernier message: 24/08/2010, 22h42
  2. [FLEX] MenuBar: distinguer les items des menus
    Par alice.b dans le forum MXML
    Réponses: 0
    Dernier message: 15/04/2009, 16h21
  3. Problème : restaurer les menus sous enlightenment
    Par dark_clem dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 04/06/2004, 18h48
  4. [VBA-E]Demande de précision sur les menus
    Par geffdenimes dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/06/2003, 10h46
  5. Pb avec les menus
    Par Ph. B. dans le forum XMLRAD
    Réponses: 6
    Dernier message: 29/01/2003, 11h57

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