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

Tkinter Python Discussion :

appel d'une fonction dans une class


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 32
    Points : 27
    Points
    27
    Par défaut appel d'une fonction dans une class
    Bonjour a tous et a toutes,

    Voila j'essaie de créer une fenêtre pop up au démarrage de mon programme tout fonctionne jusqu'à ce que je veuille ajouter un label avec des messages d'informations.
    Le programme fonctionne sauf quand j'ajoute mon programme au reste de mon programme principale.
    Je voudrai faire quelque chose le plus propre possible. J'ai donc créer une class.
    Clairement le problème vient de la fonction Install mais je ne sais pas comment l'appeler.
    Est ce que quelqu'un peu m'expliquer le problème ou me donner des infos car là je sèche.

    Merci beaucoup a tout le monde.

    Bonne soirée ou bonne journée

    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
     
    import os
    import csv
    import tkinter as Tk
    import PIL
     
     
    class Identification (Tk.Tk) :
        def __init__(self):
            Tk.Tk.__init__(self)
            self.titre()
            self.iconbitmap("roue.ico")
            self.creer_canvas()
            self.User()
            self.Install()
     
        def titre(self):
            self.titre = Tk.Label(self, text = "SERVICE SIG TOPOGRAPHIE")
            self.titre.grid(row = 0)
     
        def creer_canvas(self):
            self.can =Tk.Canvas(self, width =350, height =150)
            self.img = Tk.PhotoImage(file ="Sdeeg.gif")
            self.can.create_image(175, 80, image =self.img)
            self.can.grid(row = 1 ,  padx = 10 , pady = 10)
     
     
        def User(self):
            #Nom de l'odinateur
            name = os.path.basename(os.environ['USERPROFILE'])
     
            #Connexion au fichier des droits d'urtilisateur
            #Création de liste pour connaitre comparer le nom et les droits d'acces
            Connexion = r"Nom_Ordi.csv"
            file = open(Connexion)
            fichierCSV = csv.reader(file)
     
            NomOrdi = []
            User = []
     
            for ligne in fichierCSV:
                Ordi = ligne[0]
                Nom = ligne[1]
                NomOrdi.append(Ordi)
                User.append(Nom)
     
            if name not in  NomOrdi :
                info = ("Acces refusé")
            else:
                NumeroIndexUser = NomOrdi.index(name)
                info = ("Bonjour" + User[NumeroIndexUser])
     
            self.label= Tk.Label(self, text = info)
            self.label.grid(row = 2)
     
        def Install(self):
            print ("dd")
            TEXT = ["voila ","zozo","dd", "info diverses"]
            counter = -1
            def counter_label(labelInfo):
                def count():
                    global counter
                    counter += 1
                    if counter == len(TEXT):
                        print ("quitter")
    ##                self.destroy()
                    else:
                        labelInfo.config(self, text=TEXT[counter])
                        labelInfo.after(2000, count)
                count()
     
     
            self.labelInfo = Tk.Label(self, fg="green")
            self.labelInfo.grid(row = 3)
     
     
     
    if __name__ == "__main__":
        app = Identification()
        app.title ("Identification")
        app.mainloop()

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Clairement le problème vient de la fonction Install mais je ne sais pas comment l'appeler.
    Est ce que quelqu'un peu m'expliquer le problème ou me donner des infos car là je sèche.
    Attendez voir, il y a quoi dans Install?
    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
       def Install(self):
            print ("dd")
            TEXT = ["voila ","zozo","dd", "info diverses"]
            counter = -1
            def counter_label(labelInfo):
                def count():
                    global counter
                    counter += 1
                    if counter == len(TEXT):
                        print ("quitter")
    ##                self.destroy()
                    else:
                        labelInfo.config(self, text=TEXT[counter])
                        labelInfo.after(2000, count)
                count()
     
     
            self.labelInfo = Tk.Label(self, fg="green")
            self.labelInfo.grid(row = 3)
    Comme counter_label n'est jamais appelée, çà se réduit à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       def Install(self):
            print ("dd")
            TEXT = ["voila ","zozo","dd", "info diverses"]
     
            self.labelInfo = Tk.Label(self, fg="green")
            self.labelInfo.grid(row = 3)
    qui n'a aucune raison de ne pas fonctionner.
    Après c'est sûr que derrière tout le code que j'ai viré, il y avait l'intention de faire quelque chose... mais comme vous ne prenez pas la peine de dire ce que vous cherchiez à faire ben on ne va pas l'inventer.

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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    ah oui c'est vrai que j'ai oublier ce détail

    Je veux juste un label en bas de ma fenêtre que ferait apparaître des messages (provenant de la liste).
    Pour l'instant les messages sont a intervalles régulier

    Voici le code sur lequel je me suis inspiré et qui fonctionne.
    Mais je n'arrive pas a le faire fonctionner dans mon programme complet

    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 tkinter as tk
     
     
    TEXT = ["voila ","zozo","nico"]
    counter = -1
    def counter_label(labelInfo):
      def count():
        global counter
        counter += 1
        if counter == len(TEXT):
            root.destroy()
        else:
            labelInfo.config(text=TEXT[counter])
            labelInfo.after(2000, count)
     
     
      count()
     
     
    root = tk.Tk()
    root.title("info")
     
    labelInfo = tk.Label(root, fg="green")
    labelInfo.pack()
     
    counter_label(labelInfo)
     
    root.mainloop()

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Nherve33 Voir le message
    Mais je n'arrive pas a le faire fonctionner dans mon programme complet
    Ben déjà, il faut découper votre code "horizontalement" pour savoir ce que vous allez faire avant et dans le block défini par if __name__ == '__main__': çà, c'est facile:

    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
     
    import tkinter as tk
     
     
    TEXT = ["voila ","zozo","nico"]
    counter = -1
    def counter_label(labelInfo):
      def count():
        global counter
        counter += 1
        if counter == len(TEXT):
            root.destroy()
        else:
            labelInfo.config(text=TEXT[counter])
            labelInfo.after(2000, count)
     
     
      count()
     
    if __name__ == '__main__':
        root = tk.Tk()
        root.title("info")
     
        labelInfo = tk.Label(root, fg="green")
        labelInfo.pack()
     
        counter_label(labelInfo)
     
        root.mainloop()
    Après, il faut pousser dans une fonction tout ou partie des instructions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        labelInfo = tk.Label(root, fg="green")
        labelInfo.pack()
     
        counter_label(labelInfo)
    dans une fonction qui pourra être appelée depuis une des méthodes de votre classe.

    Les difficultés sont dans la répartition des rôles et des responsabilités: qu'est ce qu'on fait avant d'appeler une fonction et après, quel est le tas de fonctionnalités qu'on met dans la boîte "class",..
    Comme c'est un découpage, il y a pleins de façons de le réaliser... à vous de découvrir celles qui vous paraissent plus intelligentes/adaptées que d'autres.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/09/2019, 15h09
  2. appel d'une classe dans une fonction
    Par fraisa1985 dans le forum Général Java
    Réponses: 7
    Dernier message: 27/03/2008, 12h11
  3. appel d'une classe java dans un jsp
    Par kanzarih dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 01/03/2007, 13h06
  4. appel à une fonction dans la classe Action
    Par imane_bennouna dans le forum Struts 1
    Réponses: 3
    Dernier message: 07/08/2006, 11h09

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