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

GUI Python Discussion :

recevoir des données dans une autre classe [Python 2.X]


Sujet :

GUI Python

  1. #1
    Nouveau membre du Club Avatar de johntheripper
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 33
    Points
    33
    Par défaut recevoir des données dans une autre classe
    Bonsoir, je suis pas expert Tkinter mais depuis 1e semaine je galere sur un probleme, j'ai tourner sur tout les tutos anglais et francais mais je comprend rien.
    enfait voici mon probleme:

    j'ai crée 2 classe dans mon projet:
    - 1ere classe est dans un ficier nomé soft.py
    - 2e classe est dans un fichier nomée setup.py

    mon but est d'avoir toutes les infos d'un site web en inserant l'adresse du site web dans un Entry().
    ma 1ere classe contient les instructions qui me permettent d'avoir toute les infos, et ma deuxieme classe est celle du graphisme.
    voici le code du graphisme..
    comment proceder

    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
    class Graphic:
     
        def __init__(self):
     
            self.fen = Tk()
            self.fen.title('Findme')
            self.fen.geometry("1000x920")
            Button(self.fen, text='SCAN', fg= 'black', command= self.SendMessage).place(x='900', y='35')
            Button(self.fen, text= 'QUIT', fg= 'black', command= self.fen.quit).place(x='903', y='80')
            self.entry = Entry(self.fen, width=50).place(x='300', y='39')
            Label(self.fen,text='input your website:',fg='red').place(x='90', y='40')
            self.scrollbar = Scrollbar(self.fen)
            Text(self.fen,bg= 'white', width= 100, height= 35, yscroll= self.scrollbar.set).place(x='160', y= '130')
     
     
        def SendMessage(self):
            Label(self.fen, text ='STARTING SCAN...', bg= 'red').place(x='450', y='80')
     
     
     
     
    if __name__ == "__main__":
        graphical = Graphic()
        graphical.fen.mainloop()

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Salut,

    Je suppose que c'est ta première classe qui construit l'interface tu dois donc lui passer l'instance de celle-ci.

    Exemple, dans ta première classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            # L'interface
            self.ui = Graphic(self)
    et dans l'autre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Graphic:
        def __init__(self, main):
            self.main = main
            ...
     
        def SendMessage(self):
            Label(self.fen, text ='STARTING SCAN...', bg= 'red').place(x='450', y='80')
            # Ici, envoi des données à la classe Main
            self.main.foo(données)

  3. #3
    Nouveau membre du Club Avatar de johntheripper
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    en fait la 1ere classe Findme() est celle qui contient le code du soft, c'est a dire elle permet d'avoir les serveurs mail, dns, etc...
    maintenant la deuxieme classe Graphic() est celle qui construit l'interface graphique...
    je veux que cela se fasse comme la methode MVC de python......

    clairement: dans le Entry() de la classe Graphic() je mets le site web, et lui a son tour envoi le site web a la premiere classe Findme().
    la classe Findme() doit traiter le site web et ressortir ses infos, puis a son tour renvoi les resultats a la classe Graphic() qui l'affiche dans le widget Text().

    voici mon soucis que je n'arrive pas a resoudre depuis des jours.... :cry

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    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 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par johntheripper Voir le message
    clairement: dans le Entry() de la classe Graphic() je mets le site web, et lui a son tour envoi le site web a la premiere classe Findme().
    la classe Findme() doit traiter le site web et ressortir ses infos, puis a son tour renvoi les resultats a la classe Graphic() qui l'affiche dans le widget Text().

    voici mon soucis que je n'arrive pas a resoudre depuis des jours....
    L'instance d'une classe n'est rien d'autre qu'un ensemble d'attributs et une collections de méthodes qui vont éventuellement accéder/modifier ces attributs.
    Donc une fois l'entrée saisie, çà ne peut qu'appeler une méthode de l'instance de FindMe() avec l'URL en paramètre... Cette méthode fait la recherche, retourne le résultat à l'instance de la classe Graphic qui l'affiche dans un widget Text.
    Là ou çà pourrait devenir plus compliqué, c'est de dire que la requête Web et la mise en page prend tellement de temps que çà gèle l'interface et se retrouver à coder un traitement asynchrone... (appeler une méthode/fonction, récupérer son retour pour l'afficher est synchrone).

    - W

  5. #5
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Et bien ma solution devrait te convenir alors.

  6. #6
    Nouveau membre du Club Avatar de johntheripper
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    clairement: dans le Entry() de la classe Graphic() je mets le site web, et lui a son tour envoi le site web a la premiere classe Findme().
    la classe Findme() doit traiter le site web et ressortir ses infos, puis a son tour renvoi les resultats a la classe Graphic() qui l'affiche dans le widget Text().

    voici mon soucis que je n'arrive pas a resoudre depuis des jours....


    Sincerement je galere encore sur ce probleme, voici le code source en question:




    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
    #!/usr/bin/python
    # -*-Coding:UTF-8 -*-
     
    import socket
    import dns.resolver
    import dns
    from pierky.ipdetailscache import IPDetailsCache
    import geocoder
    import os
    from Tkinter import *
     
     
    class Graphic:
        "create the GUI"
     
        def __init__(self):
     
            self.fen = Tk()
            self.fen.title('Findme')
            self.fen.geometry("1000x920")
            Button(self.fen, text='SCAN', fg= 'black', command= self.SendMessage).place(x='900', y='35')
            Button(self.fen, text= 'QUIT', fg= 'black', command= self.fen.quit).place(x='903', y='80')
            self.entree = StringVar()
            Entry(self.fen, text= self.entree, width=50).place(x='300', y='39')
            Label(self.fen,text='input your website:',fg='red').place(x='90', y='40')
            self.scrollbar = Scrollbar(self.fen)
            Text(self.fen,bg= 'white', width= 100, height= 35, yscroll= self.scrollbar.set).place(x='160', y= '130')
     
        def SendMessage(self):
            Label(self.fen, text ='STARTING SCAN...', bg= 'red').place(x='450', y='80')
     
    if __name__ == "__main__":
        graphical = Graphic()
        graphical.fen.mainloop()
     
     
    app = Graphic()
     
    class findme:
            "this class show some informations on website"
            def __init__(self):
     
     
                self.ip = ''
                self.name = socket.gethostbyname(self.ip)  # Convert the site web name in address ip x.x.x.x
                self.cache = IPDetailsCache() #call the Class 'IPDetailsCache()'
                self.r = self.cache.GetIPInformation(self.name) #use the 'GetIPInformation()' methods
                print("adresse IPV4 : {0}".format(self.name))  # show the website ip
     
                print("******************************************************************")
                print("\n\t\t\tASN informations:\n")  # show ASN informations
     
                for cle, valeur in self.r.items(): #select the items methods for show 'cle and valeur' values in boucle
                    print cle,":",valeur
     
                print("******************************************************************")
                print("\n\t\t\tLocalisation:\n")
     
                i = geocoder.maxmind(self.name)
                a = i.json
                for local, loac in a.items():
                    print local,":",loac
     
                print("******************************************************************")
                print("\n\t\t\tMAILS SERVERS:\n")
     
                reponse = dns.resolver.query(self.ip, 'MX')  #the variable 'reponse' contains the value MX of dns server
                for rdata in reponse:
                    print"seveurs mails:", (rdata.exchange)  # show the server mail
     
                print("******************************************************************")
                print("\n\t\t\tDNS SERVERS:\n")
     
                contenu = dns.resolver.query(self.ip, 'NS')  # the variable 'contenu' contains the value NS of dns server
                for resultat in contenu:
                    print"seveurs DNS:", (resultat)  # show all name servers dns
     
                print("******************************************************************")
                print("\n\t\t\tWHOIS GATHERING INFORMATIONS:\n")
     
                self.command = "whois" + " " + self.ip
                process = os.popen(self.command)
                self.results = str(process.read())
                print(self.results)
     
                print("******************************************************************")
                print("\n\t\t\tTRANSFERT ZONE LOADING...\n")
     
                self.f = "fierce" + " " + "-dns" + " " + self.ip
                self.process = os.popen(self.f)
                self.result = str(self.process.read())
                print(self.result)

  7. #7
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Ta classe findme n'est rien d'autre qu'une fonction, ce n'est pas le but d'une classe.

    Je te redonne mon exemple en plus détaillé.
    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
     
    class Main:
        def __init__(self):
            self.ui = Graphics(self)
     
        def find_me(self, url):
            # Ici le contenu de ta classe findme
            ...
            # Après tu mets à jour l'interface
            self.ui.text.setText('blabla')
     
     
    class Graphics:
        def __init__(self, main):
            self.main = main
            # ici ton interface
            # tu dois garder une référence des widgets que tu veux mettre à jour
            self.text = Text(self.fen, ...)
     
     
        def send_message(self):
            Label(self.fen, text='STARTING SCAN...', bg='red').place(x='450', y='80')
            self.main.find_me('contenu de Entry')

  8. #8
    Nouveau membre du Club Avatar de johntheripper
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    Merci a toi VinsS t Wiztrick,
    je crois que j'ai vu le probleme

    j'approfondirait encore mes notions POO et Tkinter

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 302
    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 302
    Points : 36 801
    Points
    36 801
    Par défaut
    Citation Envoyé par johntheripper Voir le message
    voici mon soucis que je n'arrive pas a resoudre depuis des jours....
    Certes, vous avez créé une classe mais, dans le code, elle est instanciée nulle part. De plus, il n'y a pas de méthode à appeler. Si vous voulez fabriquer une classe pourquoi pas mais çà serait mieux de (re)lire votre tuto. préféré pour y (re)voir les notions de constructeur, méthodes, attributs,...
    Mais, pourquoi vouloir faire une classe (construction que vous ne maîtrisez pas encore) alors qu'une simple fonction suffirait?

    - W

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

Discussions similaires

  1. [XL-2007] Remplacer des données dans une autre feuille
    Par dodo28 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/04/2009, 19h44
  2. recevoir des données d'une autre fenetre
    Par Soncar dans le forum VB.NET
    Réponses: 2
    Dernier message: 03/06/2008, 12h47
  3. [Formulaires] Traitement des données dans une autre page...
    Par sekiryou dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/03/2006, 09h08
  4. [PHP-JS] Traitement des données dans une autre page...
    Par sekiryou dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2006, 09h06
  5. Réponses: 4
    Dernier message: 19/09/2005, 15h59

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