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 :

[QtGui] mainwindow s'affiche mais [qApp.quit] ne fonctionne pas


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Par défaut [QtGui] mainwindow s'affiche mais [qApp.quit] ne fonctionne pas
    Bonjour à tous,

    Débutant en python, je dois faire évoluer une application faite sous tkinter vers quelque chose de plus design créer avec Qt designer. j'ai donc décider de commencer par apprendre les bases avec des tuto trouvés sur internet et particulièrement celui ci http://tcuvelier.developpez.com/tuto...esigner/#LII-C, je le trouvais simple et ça me semblait pouvoir correspondre à ce que je voulais faire dans un premier temps.
    Je travaille sous python 2.7.3 et Qt designer 4.8.2. Sous window 7. Ces versions sont imposés par l'entreprise dans laquelle je fais mon stage.
    J'ai suivi le tuto pour faire mon interface graphique sous Qt designer, simplement un label et une barre de menu contenant file, open et quit.
    Je transforme le .ui en .py grâce au module pyuic4 et j'obtiens le code 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
    # -*- coding: utf-8 -*-
     
    # Form implementation generated from reading ui file 'ImageViewerUI.ui'
    #
    # Created: Mon Jan 02 14:53:02 2017
    #      by: PyQt4 UI code generator 4.9.4
    #
    # WARNING! All changes made in this file will be lost!
     
    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(800, 600)
            self.centralwidget = QtGui.QWidget(MainWindow)
            self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
            self.label = QtGui.QLabel(self.centralwidget)
            self.label.setGeometry(QtCore.QRect(130, 270, 431, 171))
            self.label.setObjectName(_fromUtf8("label"))
            MainWindow.setCentralWidget(self.centralwidget)
            self.menubar = QtGui.QMenuBar(MainWindow)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
            self.menubar.setObjectName(_fromUtf8("menubar"))
            self.menuFile = QtGui.QMenu(self.menubar)
            self.menuFile.setObjectName(_fromUtf8("menuFile"))
            MainWindow.setMenuBar(self.menubar)
            self.statusbar = QtGui.QStatusBar(MainWindow)
            self.statusbar.setObjectName(_fromUtf8("statusbar"))
            MainWindow.setStatusBar(self.statusbar)
            self.actionOpen = QtGui.QAction(MainWindow)
            self.actionOpen.setObjectName(_fromUtf8("actionOpen"))
            self.actionQuit = QtGui.QAction(MainWindow)
            self.actionQuit.setObjectName(_fromUtf8("actionQuit"))
            self.menuFile.addAction(self.actionOpen)
            self.menuFile.addAction(self.actionQuit)
            self.menuFile.addSeparator()
            self.menubar.addAction(self.menuFile.menuAction())
     
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
     
        def retranslateUi(self, MainWindow):
            MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
            self.label.setText(QtGui.QApplication.translate("MainWindow", "TextLabel", None, QtGui.QApplication.UnicodeUTF8))
            self.menuFile.setTitle(QtGui.QApplication.translate("MainWindow", "File", None, QtGui.QApplication.UnicodeUTF8))
            self.actionOpen.setText(QtGui.QApplication.translate("MainWindow", "Open", None, QtGui.QApplication.UnicodeUTF8))
            self.actionQuit.setText(QtGui.QApplication.translate("MainWindow", "Quit", None, QtGui.QApplication.UnicodeUTF8))
    Je créer un main comme explicité dans le tuto toujours :
    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
    # -*-coding:Latin-1 -* 
     
    from PyQt4 import QtGui, QtCore
    import os,sys
     
    import ImageViewerUI
     
    class ImageViewer(QtGui.QMainWindow, ImageViewerUI.Ui_MainWindow):
        def __init__(self, parent=None):
            super(ImageViewer, self).__init__(parent)
            self.setupUi(self)
     
        def connectActions(self):
            self.actionQuit.triggered.connect(QtGui.qApp.quit)
            self.actionOpen.triggered.connect(self.openImage)
     
        def openImage(self):
            fileName = QtGui.QFileDialog.getOpenFileName(
                            self,
                            "Ouvrir un fichier d'image",
                            QtCore.QDir.homePath(),
                            "Fichiers d'image (*.jpg, *.jpeg, *.gif, *.png)"
                        )
            if fileName:
                self.imageLabel.setPixmap(QtGui.QPixmap(fileName))  
     
        def main(self):
            self.show()
     
     
     
    if __name__=='__main__':
        app = QtGui.QApplication(sys.argv)
        imageViewer = ImageViewer()
        imageViewer.main()
        app.exec_()
    Je lance mon main et effectivement j'ai une fenêtre qui s'ouvre avec mon label, et le menu file qui contient bien open et quit. Mais rien ne se passe lorsque je clic sur quit. Je n'ai aucune erreur qui s'affiche, je ne comprends pas d'où vient le probleme, j'ai eu beau chercher sur internet je ne trouve pas la réponse à mon probleme.
    Quelqu'un aurait il une explication?
    Par avance merci

  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
    Essaye plutôt ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            self.actionQuit.triggered.connect(QtGui.QApplication.closeAllWindows)
    Voir: http://pyqt.sourceforge.net/Docs/PyQ...loseAllWindows
    Eventuellement: http://pyqt.sourceforge.net/Docs/PyQ...tion.html#quit

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Par défaut
    je viens d'essayer à l'instant mais cela ne fonctionne toujours pas. Il y a une chose étrange, lorsque je modifie dans mon programme la fonction connectActions j'ai l'impression que ça ne fait rien. voici la modif que j'ai apporté après avoir essayer la ligne que vous m'avez donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       def connectActions(self):
            self.actionQuit.triggeredTROP.connect(QtGui.QApplication.closeAllWindows)
            #self.actionQuit.triggered.connect(QtGui.qApplication.quit)
            self.actionOpen.triggered.connect(self.openImage)
            jnkm,lml
    Je peux lancer Idle et il ne me renvoie aucune erreur. Je lance l'application, elle s'ouvre, je clic sur file, et quit, mais rien en se passe. Est ce qu'il ne manquerait pas quelque chose dans la partie de code ImageViewerUI.py d'après vous?

  4. #4
    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
    Ben oui, tu n'exécutes pas ta méthode connectActions, ajoute-la, par exemple, juste après self.setupUi(self)

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Par défaut
    Effectivement ça fonctionne beaucoup mieux comme ça. Merci beaucoup pour ton aide.

Discussions similaires

  1. 2 requêtes identiques mais l'une ne fonctionne pas
    Par bybelos33 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/03/2009, 09h06
  2. qApp->quit(); ne fonctionne pas
    Par Abdelkaoui dans le forum Qt
    Réponses: 8
    Dernier message: 13/06/2008, 15h08
  3. [VBA] Quit ne fonctionne pas toujours
    Par LordTal dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/02/2008, 05h39
  4. Réponses: 5
    Dernier message: 08/08/2007, 01h10
  5. Réponses: 8
    Dernier message: 15/09/2006, 19h37

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