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

Python Discussion :

Appel d'une fonction dans une fonction d'une même classe


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Par défaut Appel d'une fonction dans une fonction d'une même classe
    Bonjour,

    Je débute en Python et je ne comprends pas pourquoi je n'arrive pas à appeler ma fonction "clear_entry" dans la fonction "ajouter". La fonction "clear_entry" remet à blanc le champ entry e2.
    Si je mets directement self.e2.delete(0, END) dans la fonction "ajouter", ça fonctionne.
    Si j'appelle la fonction clear_entry (en enlevant le #), j'obtiens un message d'erreur "name clear_entry is not defined"

    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
     
    # -*- coding: utf-8 -*-
     
    from tkinter import *
    import sqlite3
     
    class Fenetre1(Frame):
     
        nomentry=""
        prenomentry=""
     
        def __init__(self):
            self.fen = Tk()
            self.center_window(300,100)
     
            ### Déclaration des variables pour récupérer les champs "entry"
            self.nomentry=StringVar()
            self.prenomentry=StringVar()
     
            ### Mise en place des deux champs de saisie
            Label(self.fen, text="Nom :").grid(row=0,column=0,sticky=W, pady=5)
            Label(self.fen, text="Prénom :").grid(row=1, column=0, sticky=W)
     
            self.e1 = Entry(self.fen)
            self.e2 = Entry(self.fen)
     
            self.e1.grid(row=0, column=1)
            self.e2.grid(row=1, column=1)
     
            ### Mise en place du bouton "quitter"
            self.bouton1 = Button(self.fen,text="Quitter",command=self.fen.destroy)
            self.bouton1.grid(row=2,column=1,pady=10, padx=10, sticky=E)
     
            ### Mise en place du bouton "ajouter"
            self.bouton2 = Button(self.fen,text="Ajouter", command=self.ajouter)
            self.bouton2.grid(row=2,column=0,pady=10, padx=10)
            self.fen.mainloop()
     
        def center_window(self,w=300, h=200):
             # obtenir les dimensions de l'écran
             ws = self.fen.winfo_screenwidth()
             hs = self.fen.winfo_screenheight()
             # calcul de la position x, y
             x = (ws/2) - (w/2)
             y = (hs/2) - (h/2)
             self.fen.geometry('%dx%d+%d+%d' % (w, h, x, y))
     
        def clear_entry(self):
             self.e2.delete(0, END)
     
     
        def ajouter(self):
            try:
                FichierDonnees="/home/admin73/essai/bd1.sq3"
                conn=sqlite3.connect(FichierDonnees)
                cur=conn.cursor()
     
                self.nomentry=str(self.e1.get())
                self.prenomentry=str(self.e2.get())
                cur.execute("INSERT INTO utilisateurs(nom, prenom) VALUES (?,?)",(self.nomentry,self.prenomentry))
                conn.commit()
      #        clear_entry()
                self.e2.delete(0, END)
            except Exception:
                print("Erreur")
                conn.rollback()
            finally:
                cur.close()
                conn.close()
     
    if __name__ == '__main__':
        app = Fenetre1()
    Quelqu'un peut-il SVP m'expliquer pourquoi je ne peux pas utiliser ma fonction clear_entry ?

    Merci

  2. #2
    Expert confirmé

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

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

    Tu le dis toi-même, clear_entry() est attribut de la même classe.

    donc:

  3. #3
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Par défaut
    Bonjour,

    Merci beaucoup, ça fonctionne.
    J'avais essayé pleins de choses sans penser au self, donc dés qu'on fait appel à une fonction de la même classe, il faut mettre self (je commence à mieux cerner ce self).

    Bonne journée

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par script73 Voir le message
    J'avais essayé pleins de choses sans penser au self, donc dés qu'on fait appel à une fonction de la même classe, il faut mettre self (je commence à mieux cerner ce self).
    S'efforcer à nommer cela "méthode" ou "attribut" plutôt que "fonction" devrait aussi aider.

    - 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.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/11/2014, 16h44
  2. [AC-2003] Appeller une sous fonction dans la fonction principale
    Par MatAir dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/06/2010, 16h04
  3. Réponses: 2
    Dernier message: 23/05/2010, 12h45
  4. appel d'une fonction dans la fonction pricipal
    Par phil23 dans le forum Débuter
    Réponses: 4
    Dernier message: 14/09/2007, 11h41
  5. [VB6] Appel d'une fonction dans un module d'une dll
    Par speedster dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/06/2006, 17h37

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