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 :

Popup d'avertissement [QtGui]


Sujet :

PyQt Python

  1. #1
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut Popup d'avertissement
    Bonsoir,

    Je me remet un peu à PyQt, je voudrais créer un popup 'erreur' au cas où je ne me connecte pas à un serveur.

    Voilà le traceback

    Erreur de segmentation
    Voilà mon 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    import urllib2
    import sys
    from PyQt4 import QtGui, QtCore
     
    class Popup(QtGui.QApplication):
        def __init__(self, arg):
            QtGui.QApplication.__init__(self, arg)
     
            self.main = QtGui.QMainWindow()
            self.main.resize(QtCore.QSize(500, 150))
            self.main.setMaximumSize(300, 150)
     
            self.label = QtGui.QLabel("ERREUR : Serveur indisponible", self.main)
            self.label.setGeometry(20, 30, 200, 35)
     
            self.bouton = QtGui.QPushButton(QtCore.QString('OK'), self.main)
            self.bouton.setGeometry(50, 80, 100, 35)
            self.bouton.connect(self.bouton, QtCore.SIGNAL("clicked()"), self.ok)
            self.bouton.show()
     
            self.main.show()
     
        def ok(self):
            self.main.destroy()
     
    class Connect(object):
        def __init__(self, url):
            self.url = url
            self.connecter()
     
        def connecter(self):
            try:
                url = urllib2.urlopen(self.url)
                return True
            except urllib2.URLError:
                return False
     
     
    if __name__ == '__main__':
        c = Connect('http://www.jfdljfdl.html')
        if not c.connecter():  
            app = Popup(sys.argv)
            app.exec_()
    Quand je clique sur le bouton, le destroy() ne quitte pas correctement, pourquoi, je ne sais pas

    Edit : Mon code ne s'était pas complètement collé, c'est réparé
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  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
    Salut,

    C'est typiquement ceci qu'il te faut:

    http://www.riverbankcomputing.co.uk/...ormessage.html

    Maintenant, si tu tiens à ton popup personnalisé, il suffit de simplifier ton code pour le faire tourner correctement.

    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
     
    import sys
    from PyQt4 import QtGui, QtCore
     
    class Message(object):
        def __init__(self, widget):
            super(Message, self).__init__()
            self.layout = QtGui.QVBoxLayout(widget)
            self.label = QtGui.QLabel("ERREUR : Serveur indisponible", widget)
            self.layout.addWidget(self.label)
            self.bouton = QtGui.QPushButton('OK', widget)
            self.layout.addWidget(self.bouton)
            self.bouton.clicked.connect(widget.close)
            widget.show()
     
     
    class Connect(object):
        def __init__(self, url):
            self.url = url
            self.connecter()
     
        def connecter(self):
            try:
                url = urllib2.urlopen(self.url)
                return True
            except urllib2.URLError:
                return False
     
     
    if __name__ == '__main__':
        c = Connect('http://www.jfdljfdl.html')
        if not c.connecter():  
            app = QtGui.QApplication(sys.argv)
            ui = QtGui.QWidget()
            mess = Message(ui)
            app.exec_()
        print "Le programme tourne toujours"
    Quand à destroy(), j'en ignorais l'existence et je ne l'ai pas trouvé dans la doc de QMainWindow. Je pense que l'on peut vivre sans.

  3. #3
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    C'est typiquement ceci qu'il te faut:

    http://www.riverbankcomputing.co.uk/...ormessage.html
    Merci c'est nickel

    Maintenant, si tu tiens à ton popup personnalisé, il suffit de simplifier ton code pour le faire tourner correctement.
    Eh bien en fait, je cherche surtout où se trouve mon erreur, car je vois pas du tout, ou plutôt je ne vois plus

    Quand à destroy(), j'en ignorais l'existence et je ne l'ai pas trouvé dans la doc de QMainWindow. Je pense que l'on peut vivre sans.
    Méthode de QWidget

    Par contre quand j'utilise QErrorMessage, cela fonctionne correctement et j'ai rien changé à mon organisation de départ et ma méthode destroy fonctionne nickel

    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
    import urllib2
    import sys
    from PyQt4 import QtGui, QtCore
     
    class Popup(QtGui.QApplication):
        def __init__(self, arg):
            QtGui.QApplication.__init__(self, arg)
     
            self.main = QtGui.QMainWindow()
            self.main.resize(QtCore.QSize(500, 150))
            self.main.setMaximumSize(300, 150)
     
            self.message = QtGui.QErrorMessage(self.main)
            self.message.showMessage(QtCore.QString("ERREUR : Connection impossible"))
     
            self.bouton = QtGui.QPushButton(QtCore.QString("OK"), self.main)
            self.bouton.connect(self.bouton, QtCore.SIGNAL("clicked()"), self.ok)
            self.bouton.show()
     
        def ok(self):
            self.main.destroy()
     
    class Connect(object):
        def __init__(self, url):
            self.url = url
            self.connecter()
     
        def connecter(self):
            try:
                url = urllib2.urlopen(self.url)
                return True
            except urllib2.URLError:
                return False
     
     
    if __name__ == '__main__':
        c = Connect('http://www.jfdljfdl.html')
        if not c.connecter():  
            app = Popup(sys.argv)
            app.exec_()
    Où se trouve mon bug

    Edit : Bon en fait je pense que c'est la méthode destroy() qu'il aime pas. Elle existe, mais elle n'est pas appréciée dans cette situation.

    J'ai résolu le problème grâce à ton aide, je remet mon code corrigé

    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
    from PyQt4 import QtGui, QtCore
    import sys
     
    class Fen(QtGui.QApplication):
        def __init__(self, arg):
            QtGui.QApplication.__init__(self, arg)
     
            self.main = QtGui.QMainWindow()
            self.main.resize(600, 400)
     
            self.label = QtGui.QLabel("ERREUR : Serveur indisponible", self.main)
            self.label.setGeometry(200, 60, 200, 35)
     
            self.bouton = QtGui.QPushButton(QtCore.QString('QUITTER'), self.main)
            self.bouton.clicked.connect(self.main.close)
            self.bouton.setGeometry(250, 100, 70, 35)
     
            self.main.show()
     
    app = Fen(sys.argv)
    app.exec_()
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

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

Discussions similaires

  1. [AC-2003] Popup d'avertissement aux utilisateurs
    Par Rickhq dans le forum VBA Access
    Réponses: 0
    Dernier message: 01/05/2014, 17h25
  2. Popup d'avertissement et redirection
    Par Marc_27 dans le forum ASP.NET
    Réponses: 14
    Dernier message: 12/01/2010, 16h59
  3. Fermer un Popup d'avertissement d'IE
    Par finopat dans le forum VBScript
    Réponses: 0
    Dernier message: 15/11/2007, 09h35
  4. [EXCEL] Popup d'avertissement
    Par Mzr dans le forum Excel
    Réponses: 1
    Dernier message: 24/11/2006, 16h48

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