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 :

Fonction : Quitter l'interface graphique


Sujet :

PyQt Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 31
    Points : 23
    Points
    23
    Par défaut Fonction : Quitter l'interface graphique
    Bonjour,

    Je suis un débutant je m'entraine donc en appliquant des petits tutoriels afin de concevoir des interfaces graphiques simples.

    J'ai rencontré un petit souci : je n'arrive pas à savoir quel fonction utiliser afin de fermer l'interface quand je clique sur ' Close ' ; j'ai rajouté une image pour bien expliquer

    j'ai essayé : qApp.quit / QApplication.quit .. rien ne marche

    Nom : pb.PNG
Affichages : 5212
Taille : 399,8 Ko

    Bien cordialement,

  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,

    Citation Envoyé par Qtdigitex Voir le message
    j'ai essayé : qApp.quit / QApplication.quit .. rien ne marche
    Vous avez stocké l'instance de votre QApplication dans la variable "app" et non "qApp"... QApplication est une classe: çà ne marchera pas non plus et dans le code que vous montrez vous surchargez une méthode "close"...
    Simplifiez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from PyQt5.QtWidgets import QApplication, QPushButton
     
    app = QApplication([])
    btn = QPushButton('Quit')
     
    btn.clicked.connect(QApplication.instance().quit)
     
    btn.show()
    app.exec_()
    Vous pouvez remplacer QApplication.instance().quit par app.quit ou par btn.close.

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Merci pour votre réponse,

    J'ai fait ce que vous avez expliqué , mais toujours le même résultat : la fenêtre ne se ferme pas

    Nom : pb.PNG
Affichages : 4568
Taille : 661,7 Ko

  4. #4
    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,

    Ben simplifiez votre code à juste ce qu'il faut pour reproduire ce que vous constatez et vous le postez en utilisant la balise CODE.

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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Ben simplifiez votre code à juste ce qu'il faut pour reproduire ce que vous constatez et vous le postez en utilisant la balise CODE.

    - W
    Je vous prie d'être patient avec moi mais ne vois pas comment cela résout le problème , mais bon voilà le code :

    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
    import sys
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    from visio import *
     
    class Imageview(QMainWindow,Ui_vision):
        def __init__(self,parent=None):
            super().__init__()
            self.setupUi(self)
            self.fichier=QPixmap()
            self.label.setMaximumSize(QSize(1000,600))
            self.label.setScaledContents(True)
            self.connectActions()
            self.connect(self.pushButton_2 ,SIGNAL("clicked()") , self.openImage)
            self.pushButton.clicked.connect(app.quit)
     
        def connectActions(self):
            self.actionOpen.triggered.connect(self.openImage)
     
     
        def openImage(self):
            self.fileName = QFileDialog.getOpenFileName(None,"Open Image")
            self.fichier.load(self.fileName)
            self.label.setPixmap(self.fichier)
     
    if __name__== '__main__':
        app = QApplication(sys.argv)
        myapp = Imageview()
        myapp.show()
        app.exec_()
    Je tiens à préciser , bien que ça se voit , que la mise en page a été faite par Qt Designer.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    J'ai essayé le code provenant de ce tutoriel très simple qui vise juste à coder un button qui quitte l'interface . et ça n'a pas marché pour moi , il ne se passe rien quand j'appuie ...

    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
    from PyQt4 import QtGui, QtCore
    import sys
    if __name__=='__main__':
        app = QtGui.QApplication(sys.argv)
        window = QtGui.QWidget()
        window.setWindowTitle("Signaux")
        button = QtGui.QPushButton("Appuyez", window)
     
        button.resize(200, 40)
        button.connect(button, QtCore.SIGNAL("clicked()"),\
            app, QtCore.SLOT("quit()"))
     
        window.show()
     
        app.exec_()

  7. #7
    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
    Citation Envoyé par Qtdigitex Voir le message
    Je vous prie d'être patient avec moi mais ne vois pas comment cela résout le problème , mais bon voilà le code :
    Cà permet de recopier le code chez moi et de reproduire le problème: çà ne résout rien mais çà permet de travailler dessus.
    Et là le code que vous montrez, désolé mais pour qu'il tourne, je suis obligé de supprimer pas mal de choses et d'en rajouter:
    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
    import sys
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    # from visio import *
     
    class Imageview(QMainWindow):#,Ui_vision):
        def __init__(self,parent=None):
            super().__init__()
    #         self.setupUi(self)
            self.fichier=QPixmap()
    #         self.label.setMaximumSize(QSize(1000,600))
    #         self.label.setScaledContents(True)
    #         self.connectActions()
    #         self.connect(self.pushButton_2 ,SIGNAL("clicked()") , self.openImage)
            self.pushButton = QPushButton('Quit', self)
            self.pushButton.clicked.connect(app.quit)
     
        def connectActions(self):
            self.actionOpen.triggered.connect(self.openImage)
     
     
        def openImage(self):
            self.fileName = QFileDialog.getOpenFileName(None,"Open Image")
            self.fichier.load(self.fileName)
            self.label.setPixmap(self.fichier)
     
    if __name__== '__main__':
        app = QApplication(sys.argv)
        myapp = Imageview()
        myapp.show()
        app.exec_()
    Evidemment, plus de problème.
    Et il n'y a que vous qui puissiez construire un exemple "minimal" qui puisse reproduire ce que vous constatez.

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

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Je vous remercie encore pour votre réponse,

    j'ai recopié votre code , j'obtiens bien une fenêtre avec un bouton ' Quit ' , mais lorsque je clique .. Rien ne se passe

    j'ai testé sur mes deux ordinateurs (python 3.4 64bits ) , je ne vois pas d'où peut venir le problème ..

  9. #9
    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,

    Voilà comment je coderais un truc comme ça (Python 3, PyQt4):

    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
    # -*- coding: utf-8 -*-
    # Python 3
     
    import sys
    from PyQt4 import QtCore, QtGui
     
    #############################################################################
    class Fenetre(QtGui.QWidget):
     
        def __init__(self, parent=None):
            super(Fenetre, self).__init__(parent)
     
            self.resize(300, 200)
            self.setWindowTitle("Test")
     
            self.bouton = QtGui.QPushButton("Cliquez!", self)
            self.bouton.clicked.connect(self.clictest)
     
            self.boutonquit = QtGui.QPushButton("Quitter le programme", self)
            self.boutonquit.clicked.connect(self.quitter)
     
            posit = QtGui.QGridLayout()
            posit.addWidget(self.bouton, 0, 0)
            posit.addWidget(self.boutonquit, 1, 0)
            self.setLayout(posit)
     
        @QtCore.pyqtSlot()    
        def clictest(self):
            QtGui.QMessageBox.information(self, 
                "Information", 
                "Vous avez cliqué sur le bouton!")
     
        @QtCore.pyqtSlot()    
        def quitter(self):
            self.close()
     
    #############################################################################
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        fen = Fenetre()
        fen.show()
        sys.exit(app.exec_())
    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

  10. #10
    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
    Citation Envoyé par Qtdigitex Voir le message
    J'ai essayé le code provenant de ce tutoriel très simple qui vise juste à coder un button qui quitte l'interface . et ça n'a pas marché pour moi , il ne se passe rien quand j'appuie ...

    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
    from PyQt4 import QtGui, QtCore
    import sys
    if __name__=='__main__':
        app = QtGui.QApplication(sys.argv)
        window = QtGui.QWidget()
        window.setWindowTitle("Signaux")
        button = QtGui.QPushButton("Appuyez", window)
     
        button.resize(200, 40)
        button.connect(button, QtCore.SIGNAL("clicked()"),\
            app, QtCore.SLOT("quit()"))
     
        window.show()
     
        app.exec_()
    Super! je peux lancer chez moi un code qui ne fonctionne pas chez vous sans avoir à le modifier: on progresse car on a un code qu'on peut lire sans y trouver de défaut apparent (même s'il y a plusieurs façons d'écrire cela toutes devraient produire le même résultat: sortie de l'application lorsqu'on clique sur le bouton).

    Et maintenant, on est bien embêté car si çà ne vient pas du code çà vient probablement de votre configuration/installation de PyQt4/Qt4.
    Juste pour le fun essayez ce code là:
    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
    from PyQt4.QtGui import QApplication, QPushButton, QWidget
     
    if __name__=='__main__':
        app = QApplication([])
        window = QWidget()
        window.setWindowTitle("Signaux")
        button = QPushButton("Appuyez", window)
     
        button.resize(200, 40)
     
        def callback():
            print ('callback')
            #app.quit()
            window.close()
     
        button.clicked.connect(callback)
     
        window.show()
     
        app.exec_()
    çà dira si le callback est appelé et si ce sont app.quit et window.close qui sont (tous les deux) cassés.


    note: In fine, le but du jeu est de documenter la recette de cuisine qui vous a conduit à cette anomalie. Au bout du bout, il n'y a que le support PyQt/Qt qui pourront corriger cela. Et on sait d'avance qu'il ne le feront pas car Qt4 n'est plus "supporté". Donc si vous galérez trop et que personne n'a d'idée sur ce qu'on pourrait faire, envisager d'installer les dernières versions de Qt5 et de PyQt5 (au moins pour voir) est une option qui a le mérite d'apporter une réponse rapide.

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

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Merci , ce dernier code a bien fonctionné chez moi

    J'ai réinstallé Python 3.5 et PyQt 5 pour réessayer le premier code , alors là j'obtiens un tout autre message d'erreur :

    AttributeError: module 'PyQt5.QtGui' has no attribute 'QApplication'

  12. #12
    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,

    Citation Envoyé par Qtdigitex Voir le message
    Merci , ce dernier code a bien fonctionné chez moi
    vous avez essayé window.close? que se passe-t-il avec app.quit?


    Citation Envoyé par Qtdigitex Voir le message
    J'ai réinstallé Python 3.5 et PyQt 5 pour réessayer le premier code , alors là j'obtiens un tout autre message d'erreur :

    AttributeError: module 'PyQt5.QtGui' has no attribute 'QApplication'
    nouvelle version = beaucoup de changements au moins dans le rangements des widgets dans les modules.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from PyQt5.QtWidgets import QApplication, QPushButton
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Avec App.quit() , ça ne fonctionne pas ,

    Pouvez-vous éditer le code en entier svp pour python 3.5 PyQt 5 , parce qu'à chaque fois je tombe sur des messages d'erreurs ..

    tyrtamos , effectivement votre code marche parfaitement , mais à quoi correspondent les " @QtCore.pyqtSlot() " ?

    Cordialement,

  14. #14
    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
    Citation Envoyé par Qtdigitex Voir le message
    Avec App.quit() , ça ne fonctionne pas ,
    çà fonctionne pas et vous n'avez même pas "callback" qui s'affiche sur la console et/ou vous avez un message d'erreur?

    Citation Envoyé par Qtdigitex Voir le message
    Pouvez-vous éditer le code en entier svp pour python 3.5 PyQt 5 , parce qu'à chaque fois je tombe sur des messages d'erreurs ..
    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
    from PyQt5.QtWidgets import QApplication, QPushButton, QWidget
     
    if __name__=='__main__':
        app = QApplication([])
        window = QWidget()
        window.setWindowTitle("Signaux")
        button = QPushButton("Appuyez", window)
     
        button.resize(200, 40)
     
        def callback():
            print ('callback')
            #app.quit()
            window.close()
     
        button.clicked.connect(callback)
     
        window.show()
     
        app.exec_()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    ça a marché parfaitement sur PyQt5

    En fait , avec app.quit : le Callback s'affiche bien , mais l'interface ne se ferme pas .

  16. #16
    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
    Citation Envoyé par Qtdigitex Voir le message
    ça a marché parfaitement sur PyQt5

    En fait , avec app.quit : le Callback s'affiche bien , mais l'interface ne se ferme pas .
    strange... bon si tout fonctionne sur Qt5 autant en rester là.

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

  17. #17
    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
    Citation Envoyé par Qtdigitex Voir le message
    tyrtamos , effectivement votre code marche parfaitement , mais à quoi correspondent les " @QtCore.pyqtSlot() " ?
    Avec Python, on peut connecter ("connect") un signal avec n'importe quel méthode, mais il est cependant recommandé de désigner celle-ci comme "slot" avec ce décorateur, qui comporte en plus des paramètres, comme le type de données attendues.

    Voir ici: http://pyqt.sourceforge.net/Docs/PyQ...slot-decorator.

    Voilà la version PyQt5 du code de tout à l'heure:

    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
    # -*- coding: utf-8 -*-
    # Python 3
     
    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets
     
    #############################################################################
    class Fenetre(QtWidgets.QWidget):
     
        def __init__(self, parent=None):
            super(Fenetre, self).__init__(parent)
     
            self.resize(300, 200)
            self.setWindowTitle("Test")
     
            self.bouton = QtWidgets.QPushButton("Cliquez!", self)
            self.bouton.clicked.connect(self.clictest)
     
            self.boutonquit = QtWidgets.QPushButton("Quitter le programme", self)
            self.boutonquit.clicked.connect(self.quitter)
     
            posit = QtWidgets.QGridLayout()
            posit.addWidget(self.bouton, 0, 0)
            posit.addWidget(self.boutonquit, 1, 0)
            self.setLayout(posit)
     
        @QtCore.pyqtSlot()    
        def clictest(self):
            QtWidgets.QMessageBox.information(self, 
                "Information", 
                "Vous avez cliqué sur le bouton!")
     
        @QtCore.pyqtSlot()    
        def quitter(self):
            self.close()
     
    #############################################################################
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        fen = Fenetre()
        fen.show()
        sys.exit(app.exec_())
    A mon avis, la bonne méthode pour quitter une fenêtre (et le programme si c'est la fenêtre principale) est .close() et non app.quit(). Cette dernière instruction app.quit() est un arrêt sauvage du la bibliothèque graphique. Je ne l'utilise que pour arrêter un programme lancé si les paramètres sont incorrects, avant d'arriver à la boucle de traitement des évènements app.exec_().
    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

  18. #18
    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
    Citation Envoyé par tyrtamos Voir le message
    A mon avis, la bonne méthode pour quitter une fenêtre (et le programme si c'est la fenêtre principale) est .close() et non app.quit(). Cette dernière instruction app.quit() est un arrêt sauvage du la bibliothèque graphique. Je ne l'utilise que pour arrêter un programme lancé si les paramètres sont incorrects, avant d'arriver à la boucle de traitement des évènements app.exec_().
    .quit sort de la mainloop.. qui peut être reprise avec .exec_, rien de bien méchant...
    De toutes façons bonne ou mauvaise, cette méthode devrait fonctionner.

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

  19. #19
    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
    Citation Envoyé par wiztricks Voir le message
    De toutes façons bonne ou mauvaise, cette méthode devrait fonctionner.
    Et le remplacement de self.close() par app.quit() fonctionne avec mon code (même si je n'aime pas cette solution).
    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

  20. #20
    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
    Citation Envoyé par tyrtamos Voir le message
    Et le remplacement de self.close() par app.quit() fonctionne avec mon code (même si je n'aime pas cette solution).
    C'est une question à poser au PO: mais ce n'est pas la déclaration "moderne" des slots qui doit y changer grand chose.

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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/09/2013, 17h45
  2. Interface graphique MATLAB et la fonction XLSREAD
    Par Amine_lamo dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 13/11/2010, 13h51
  3. Réponses: 0
    Dernier message: 15/06/2010, 16h36
  4. Interface graphique en fonction de role utilisateur
    Par LibidoPostToxico dans le forum VB.NET
    Réponses: 8
    Dernier message: 01/06/2010, 13h55
  5. Passage de paramètres entre une fonction et une interface graphique
    Par ninja_3 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 29/05/2007, 11h37

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