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 :

Problème de fonction ?


Sujet :

PyQt Python

  1. #1
    Membre éclairé Avatar de shell13010
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2008
    Messages : 281
    Par défaut Problème de fonction ?
    Salut a tous

    Etant débutant sur PyQt

    Je suis devant un problème tout bête peut-etre mais après mettre battu avec mon code sa n'aboutit a rien.

    mon problème viens du fait que j'essaye d'intégrer un petit script python qui récupère mon adresse IP et ensuite me l'affiche dans un Qlabel ou autre.

    Voici mon code PyQt:

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import sys
    import src_rc
    from PyQt4 import QtCore, QtGui
    from editeurtext import Ui_MainWindow
    from urllib import *
     
     
    class SwingEditor(QtGui.QMainWindow):
     
    	def __init__(self, parent=None):
    		QtGui.QWidget.__init__(self, parent)
    		self.ui = Ui_MainWindow()
    		self.ui.setupUi(self)
    		#slot
    QtCore.QObject.connect(self.ui.actionrecupIP,QtCore.SIGNAL("triggered()"), self.MonIp)
    ####################################################			
            def MonIp(self):
                    url = "http://www.whatismyip.com/automation/n09230945.asp"
                    try:
                            opener = urlopen(url)
                    except:
                            return False
                    IP = str(opener.read())
                    return IP[0:]
     
     
    IP = MonIp()
     
    if(IP,self):
            self.ui.textEdit.setText("Mon Ip est:"+IP)
            sys.exit(0)
            self.ui.textEdit.setText("Not found.")
     
    if __name__ == "__main__":
    	app = QtGui.QApplication(sys.argv)
    	myapp = SwingEditor()
    	myapp.show()
    	sys.exit(app.exec_())
    Enfaite le problème viens du fait que je n'arrive pas a remplacer Print"..." pour afficher le resultat sur ma fenetre..

    voila le code python simple:

    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
    from urllib import *
    import sys
     
     
    def MonIp():
            url = "http://www.whatismyip.com/automation/n09230945.asp"
            try:
                    opener = urlopen(url)
            except:
                    return False
            IP = str(opener.read())
            return IP[0:]
     
    IP = MonIp()
     
    if(IP):
            print("Mon Ip est : ip:"+IP)
            sys.exit(0)
            print("Not found.")
    Auriez vous une idée sur se problème?

    car je trouve que c'est assez galère pour intégrer du pure python

    Merci d'avance pour votre aide.

    Cordialement.

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 303
    Par défaut
    Salut,

    Je suppose que l'interface est séparée et a été créée avec QDesigner et que actionRecupIp est un item de menu.

    Par contre ton code est étrange, ou alors le copier-coller a modifié certaines indentations.

    En détails :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    class SwingEditor(QtGui.QMainWindow):
     
    	def __init__(self, parent=None):
    		QtGui.QWidget.__init__(self, parent)
    ...
    A mon avis ce QtGui.QWidget n'a pas d'utilité à cet endroit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
                    self.ui.setupUi(self)
    		#slot
                    QtCore.QObject.connect(self.ui.actionrecupIP,QtCore.SIGNAL
                                                          ("triggered()"), self.MonIp)
                    #########################################
    ...
    Je te recommande les connexions new style, c'est du détail mais toute bonne habitude est bonne à prendre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                     self.ui.actionrecupIP.triggered.connect(self.MonIp)
    Ensuite, je ne comprend plus :
    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
     
            def MonIp(self):
                    url = "http://www.whatismyip.com/automation/n09230945.asp"
                    try:
                            opener = urlopen(url)
                    except:
                            return False
                    IP = str(opener.read())
                    return IP[0:]
     
     
    IP = MonIp()
     
    if(IP,self):
            self.ui.textEdit.setText("Mon Ip est:"+IP)
            sys.exit(0)
            self.ui.textEdit.setText("Not found.")
    D'abord, ta fonction MonIp() retourne l'ip, oui mais à qui ? à l'item sur lequel tu as cliqué dans le menu ?

    C'est à la place de ce return que tu devrais placer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                if(IP,self):
                     self.ui.textEdit.setText("Mon Ip est:"+IP)
    ensuite les six dernières lignes, même s'il s'agit d'une erreur d'indentation, elle n'ont pas d'utilité et si ce n'est pas une erreur d'indentation, IP = MonIp() devrait planter ton apply au lancement car, à ce stade, python ignore tout de MonIp().

    De plus avec le sys.exit() placé là, tu ne devrais pas avoir le temps de voir ton ip s'afficher.

    Bref, simplifies et ça fonctionnera.

    Edit : J'ajouterai, IP[0:] est un pléonasme.

  3. #3
    Membre éclairé Avatar de shell13010
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2008
    Messages : 281
    Par défaut
    Salut VinsS

    Je pense que je vais refaire le code car je me suis perdu en route surtout a cette heure ou j'ai écrit se poste

    alors je récapitule tes conseils:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Je te recommande les connexions new style, c''est du détail mais toute bonne habitude est bonne à prendre.
    En effet je ne le savais pas, je tacherais de l'utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ensuite, je ne comprend plus :
    en effet j'avoue que je me suis perdu car le code de base est :
    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
    def MonIp():
            url = "http://www.whatismyip.com/automation/n09230945.asp"
            try:
                    opener = urlopen(url)
            except:
                    return False
            IP = str(opener.read())
            return IP[0:]
     
    IP = MonIp()
     
    if(IP):
            print("Mon Ip est : ip:"+IP)
            sys.exit(0)
            print("Not found.")
    Je l'avais coder en pure python et il fonctionne dans un shell mais peut-etre qu'il y a moyen de l'optimiser?

    Alors je veux que MonIp retourne l'Ip dans un QLabel tout simplement,mais je n'y arrive pas..

    C'est à la place de ce return que tu devrais placer:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(IP):
        self.ui.textEdit.setText("Mon Ip est:"+IP)
    Effectivement IP=MonIp() me le fait planter

    et le mot de la fin Edit : J'ajouterai, IP[0:] est un pléonasme. je connaisser pas se mot tu m'auras apprit quelque choses aujourd'hui

    Alors j'avais penser ne rien créer avec Designer pour simplifier genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import sys
    from PyQt4.QtGui import QLabel, QApplication
    .....#ma fonction ici
    if __name__=='__main__':
     
        App = QApplication(sys.argv)
        Label = QLabel( "Mon ip est:"+IP )
        Label.show()
        App.exec_()
    Quand penses-tu? es le mieux?

    Merci d'avance pour ton aide.

    PS:J'ai jeter un oeil sur Oqapy et j'ai prit peur en voyant toute les lignes de codes jespere pouvoir en faire autant plutard

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 303
    Par défaut
    Alors, dans le genre minimaliste, on peux faire :

    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
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import sys
    from urllib import urlopen
     
    from PyQt4.QtGui import QLabel, QApplication
    from PyQt4.QtCore import QSize
     
    def get_ip():
        url = "http://www.whatismyip.com/automation/n09230945.asp"
        try:
                opener = urlopen(url)
        except:
                label.setText("    IP non trouvée")
        IP = str(opener.read())
        label.setText("    Mon IP : %s" % IP)
     
    if __name__=='__main__':
        App = QApplication(sys.argv)
        label = QLabel()
        label.setMinimumSize(QSize(180, 50))
        label.show()
        get_ip()
        App.exec_()

  5. #5
    Membre éclairé Avatar de shell13010
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2008
    Messages : 281
    Par défaut
    VinsS merci pour cette exemple qui me permettra de

    comparer mes erreurs et de mieux appréhender la suite

    A bientôt et merci encore..

    Cordialement.

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

Discussions similaires

  1. C++ Problème de fonctions et pointeurs
    Par zmatz dans le forum C++
    Réponses: 3
    Dernier message: 01/10/2005, 16h20
  2. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  3. Problème de fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/05/2005, 20h30
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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