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 :

Code minimal pour obtenir une fenêtre QMainWindow en Python 3


Sujet :

PyQt Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Code minimal pour obtenir une fenêtre QMainWindow en Python 3
    Bonjour,

    Je lis actuellement le livre "Rapid Gui Programming with Python and Qt" de Mark Summerfield dans le but de programmer des applications pédagogiques.
    Au chapitre 6 on aborde les "Main Windows". Ce très long chapitre détaille la construction d' une application complète mais aborde des détails que je veux ignorer pour l'instant.
    Mon premier but est juste de construire une fenêtre principale possédant une barre de menu.
    Je ne comprends pas pourquoi je n'obtiens rien (aucune erreur mais aussi aucune fenêtre ) avec le code minimaliste suivant:

    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
     
    # /usr/bin/python3
    #-*- coding: utf-8 -*-
     
    import os
    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
     
    class MainWindow(QMainWindow):
     
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent)
     
            self.width = 600
            self.height = 600
            self.setSize(self.width, self.height)
     
            #étiquette qui contiendra l'image , créée comme**** 
            #composant central de la fenêtre.
            self.imageLabel = QLabel()
            self.imageLabel.setMinimumSize(200, 200)
            self.imageLabel.setAlignment(Qt.AlignCenter)
            self.setCentralWidget(self.imageLabel)
     
     
            #les actions****************************************
     
            fileNewAction = QAction("&New", self)
            fileNewAction.setShortCut("Ctrl+N")
            fileNewAction.triggered.connect(self.fileNewAct)
     
            fileQuitAction = QAction("&Quit", self)
            fileQuitAction.setShortCut("Ctrl+Q")
            fileQuitAction.triggered.connect(self.fileQuitAct)
     
            fileSaveAction = QAction("&Save", self)
            fileSaveAction.setShortCut("Ctrl+S")
            fileSaveAction.triggered.connect(self.fileSaveAct)
     
            zoomAction = QAction("&Zoom",self)
            zoomAction.setShortCut("Ctrl+Z")
            zoomAction.triggered.connect(self.zoomAct)
     
            helpAction = QAction("&Help",self)
            helpAction.setShortCut("Ctrl+H")
            helpAction.triggered.connect(self.helpAct)
     
     
            #créer les menus de la barre de menu*****************
            menubar = self.menuBar()
            editMenu = menubar.addMenu("&Edit")
            changeMenu = menubar.addMenu("&Change") 
            helpMenu = menubar.addMenu("&Help")
     
            editMenu.addAction(fileNewAction)
            editMenu.addSeparator()
            editMenu.addAction(fileSaveAction)
            editMenu.addSeparator()
            editMenu.addAction(fileQuitAction)
            editMenu.addSeparator()           
     
            changeMenu.addAction(zoomAction)
            changeMenu.addSeparator()
     
            helpMenu.addAction(helpAction)
            helpMenu.addSeparator()
     
            self.setWindowTitle("Image Changer")
     
        #***************finconstucteur**************************************
     
        #slots
        def fileNewAct(self):
            return
     
        def fileSaveAct(self):
            return
     
        def fileQuitAct(self):
            return
     
        def zoomAct(self):
            return
     
        def helpAct(self):
            return
     
    if __name__ == "_main__":
     
        app = QApplication(sys.argv)
     
        fenetreprincipale = MainWindow()
        fenetreprincipale.show()
        sys.exit(app.exec_())
    Je travaille sous Ubuntu, Python3 et Qt5.
    Merci pour toute aide (à un débutant).

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Le premier soucis est là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if __name__ == "_main__":
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Quand un truc ne marche pas et qu'on n'a pas de message d'erreur explicite, il est intéressant de placer provisoirement des "print" pour examiner la progression de l'exécution. Ou, bien sûr, d'utiliser un logiciel de debugging.

    En ce qui concerne la question posée, wiztricks a donné le 1er obstacle: sans la correction, aucune exécution n'est faite.

    Il y a 2 autres problèmes dans le code (j'ai testé avec PyQt4 mais j'ai vérifié dans la doc PyQt5: http://doc.qt.io/qt-5/qtwidgets-module.html):

    - QMainWindow n'a pas de méthode setSize: il faut utiliser resize.

    - Il y a une petite erreur dans la méthode setShortCut: le "C" est minuscule => setShortcut

    Une fois ces 3 problèmes résolus, ça marche.

    A noter qu'à ma connaissance, le livre "Rapid Gui Programming with Python and Qt" ne parle pas de PyQt5: il faudra veiller à faire des conversions judicieuses des exercices PyQt4 => PyQt5.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Merci
    Bonjour,

    Merci pour les 3 corrections.
    Sur mon système la fenêtre s'ouvre bien maintenant mais la barre de menu n'apparaît toujours pas.
    De quel côté faut-il chercher ?

    merci d'avance,

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bizarre.

    Sur PyQt4, avec la seule modification des importations, et bien sûr les 3 corrections, ça marche, y compris le menu.

    Suite au message, j'ai pensé que le problème venait peut-être d'une spécificité PyQt5. J'ai alors essayé sur PyQt5 (sur Linux car je ne l'ai pas sur Windows), et... ça marche aussi! Y compris le menu.

    Bref, je ne sais pas pourquoi ça ne marche pas chez toi. Es-tu sûr de ton installation Python3 + PyQt5 ?
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Merci
    Bonjour,

    Merci pour ton aide.
    Je vais vérifier mon installation.
    Ce qui est curieux c'est que jusqu'à présent tous mes scripts ont fonctionné (Qdialog etc...) pour les chapitres 1 à 5.
    Je tombe ici sur un problème.
    C'est peut_être en relation avec le fait suivant:
    Quand je crée une MainWindow directement sous QDesigner avec son menu, j'ai le même problème : la fenêtre s'ouvre mais je n'ai pas de barre de menu.

    IL faut certainement que j'efface ma version de Qt et que je la télécharge à nouveau.

    Encore merci.

  7. #7
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut RESOLU
    Rebonjour,

    Comme cela ne fonctionnait pas après réinstallation de Py3Qt5 , j'ai cherché sur le forum Ubuntu.
    Ce problème avec la barre de menu est connu.
    IL est résolu avec la commande :

    sudo apt-get remove --purge appmenu-qt5

    Apparemment c'est un paquet qui pose problème!!

    ouf!!

    Je ne comprenais vraiment pas!!

    Je vais pouvoir continuer ma lecture du livre.

    Connait-on un EDI pour python3 et Qt5?
    Je travaille actuellement avec Geany...

    Merci d'avance

  8. #8
    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
    Principalement dédié à PyQt, il y a Eric6

    http://eric-ide.python-projects.org/eric-download.html

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

Discussions similaires

  1. [XL-2003] code pour obtenir une date
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/05/2010, 17h03
  2. Code pour imprimer une fentre
    Par darkman13130 dans le forum C++Builder
    Réponses: 3
    Dernier message: 18/09/2008, 15h26
  3. Code source pour appliquer une DCT
    Par lemenyau dans le forum C
    Réponses: 14
    Dernier message: 31/05/2006, 18h38
  4. code VB pour ouvrir une page d'un formulaire
    Par marion67 dans le forum Access
    Réponses: 10
    Dernier message: 31/12/2005, 22h11
  5. code HTML pour mettre une image en background dans un menu
    Par Link14 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 16/10/2005, 12h11

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