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 :

vous avez dit 'self' [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    retraité defense
    Inscrit en
    Janvier 2024
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité defense
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2024
    Messages : 30
    Par défaut vous avez dit 'self'
    erreur penible
    En cours de mise au point j ai un ennui pour appeler une fonction :
    ------------
    Le bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    button1 = Button(root, text = " Action ! ",command =lambda: action(Ent1))
    button1.config(borderwidth=2, relief="raised",
                     bg="firebrick1", width=0,
                     height=1, font=('Arial',14, 'bold'))
    button1.place(x=600, y=150)
    ------------------
    Le pgm me génère l'erreur suivante :
    TypeError: Entry.get() missing 1 required positional argument: 'self'
    ---------------
    La box entry :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Ent1 = Entry(root ,width=42, bg='navajowhite', font=("Verdana", 12,'bold'))
    Ent1=Entry.get() # je sais pas ou mettre cette entree....?
    Ent1.place(x=30, y=140)
    ----------------
    la fonction "action":
    ----------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def action(Ent1):
        if(Ent1) == 0):
          messagebox.showerror("Erreur"," Zone fichier crypté vide !" )
        else:
            print("oqp")
    -------------------------
    j ai essayé les manips sans succès
    je ne suis pas au point pour les 'self' ???

  2. #2
    Membre actif
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 143
    Par défaut
    Salut,

    Ce n'est pas sur la classe Entry() qu'il faut appliquer la méthode .get(), mais sur l'objet (instance) Ent1.
    Ta condition dans ta fonction n'est pas bonne, car la méthode .get() retourne une chaine de caractères (vide si rien n'est saisie).
    Je pense que tu voulais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if len(Ent1.get()) == 0: # Ça fonctionne aussi
    Prends l'habitude de nommer explicitement tes variables ou tu vas vite te perdre…

    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
    from tkinter import Tk, Entry, Button, messagebox
     
    def action():
        encrypted_file = entry_encrypted_file.get()
        if not encrypted_file:
            messagebox.showerror("Erreur"," Zone fichier crypté vide !" )
        else:
            print(encrypted_file)
     
    root = Tk()
     
    entry_encrypted_file = Entry(root, width=42, bg="navajowhite", font=("Verdana", 12, "bold"))
    entry_encrypted_file.place(x=30, y=140)
     
    button1 = Button(root, text=" Action ! ", command=action)
    button1.config(
        borderwidth=2,
        relief="raised",
        bg="firebrick1",
        width=0,
        height=1,
        font=("Arial", 14, "bold"),
    )
    button1.place(x=600, y=150)
     
    root.mainloop()

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par RAMEX Voir le message
    erreur penible
    Ouais, bonjour à toi aussi !!!

    Citation Envoyé par RAMEX Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Ent1 = Entry(root ,width=42, bg='navajowhite', font=("Verdana", 12,'bold'))
    Ent1=Entry.get() # je sais pas ou mettre cette entree....?
    En tout cas où que tu la mettes, dans tous les langages du monde (donc y compris en COBOL), écrire var=valeurX puis juste en dessous var=valeurY ne peut pas fonctionner.

    Citation Envoyé par RAMEX Voir le message
    ----------------
    la fonction "action":
    ----------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def action(Ent1):
        if(Ent1) == 0):
          messagebox.showerror("Erreur"," Zone fichier crypté vide !" )
        else:
            print("oqp")
    Erreurs de parenthèses.

    Citation Envoyé par RAMEX Voir le message
    je ne suis pas au point pour les 'self' ???
    Ben non. Tout comme il faut d'abord apprendre à marcher avant de vouloir courir, il faut apprendre l'objet avant de vouloir utiliser ses méthodes. Mais le plus malheureux, c'est que tu l'as pourtant déjà fait (exemple if char.isalpha())...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  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
    Citation Envoyé par RAMEX Voir le message
    j ai essayé les manips sans succès
    je ne suis pas au point pour les 'self' ???
    Relisez vous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Ent1 = Entry(root ,width=42, bg='navajowhite', font=("Verdana", 12,'bold'))
    Ent1=Entry.get() # je sais pas ou mettre cette entree....?
    Ent1.place(x=30, y=140)
    Ent1 est la variable qui sert à mémoriser l'instance d'Entry crée par Entry(root,...)
    Ligne suivante, on essaie d'y assigner autre chose (un str si ça marchait) auquel on ne pourra pas appliquer la méthode place.
    De plus, entre le moment où l'Entry est crée et le moment où elle sera affichée, l'utilisateur n'a aucune chance d'y avoir entré quoi que ce soit.
    C'est la raison du Button: permettre à l'utilisateur de signaler qu'il a fini la saisie et qu'on peut la récupérer pour en faire quelque chose.

    Pour ce qui est du message d'erreur.
    Entry.get est une fonction qui attend l'objet auquel s'appliquer. On pourrait écrire Entry.get(Ent1). Mais on y préfère: Ent1.get qui est "méthode" i.e. la fonction précédente associée à l'objet: pas besoin de passer l'objet explicitement.
    Ce qu'on peut vérifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> from tkinter import Entry
    >>> e = Entry()
    >>> type(Entry.get)
    <class 'function'>
    >>> type(e.get)
    <class 'method'>
    Coder sans trop comprendre est jouable pour écrire quelques lignes de code. Si çà devient plus touffu, se contenter de trouver un truc pour que ça marche sans risquer de casser ce qu'on a déjà écrit ailleurs sera de plus en plus difficile: c'est un château de carte, fragile.
    Le plus simple sera de tout ré-écrire.
    Au plus le code deviendra touffu, au plus tout ré-écrire prendra du temps et... si on peut vous encourager à apprendre au début, à force ça lasse.

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

  5. #5
    Membre actif
    Homme Profil pro
    retraité defense
    Inscrit en
    Janvier 2024
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité defense
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2024
    Messages : 30
    Par défaut self
    bonsoir
    je ne suis pas a mon domicile jusqu'à lundi et je n'ai pu tester vos propositions -
    Merci pour vos réponses!

    Objectivement ,l'erreur d'affectation de entry est impardonnable et pique les yeux!!

    Pour ma méthode , c'est un choix , je ne compte pas faire des étude durant 2 ans avant
    de commencer a programmer.
    Donc après avoir acheté 4 bouquins je me suis fixé un
    projet en effaçant les problèmes par la consultation du web, et parfois en consultant
    ce forum. en désespoir de cause.
    Je ne recopie pas "bêtement" du code mais je cherche a comprendre ce qui est expliqué
    et je le met en œuvre ; sinon a quoi bon ces post ...
    En tout état de cause ca marche, je progresse confortablement, et je suis très satisfait de cette méthode.
    N'imposez pas vos méthodes qui sont scolaires; mais si ca vous lasse ou vous irrite
    vous êtes libre de regarder ailleurs.
    Pour rester positif merci a ceux qui aident (avec efficacité) sans poser des problèmes
    métaphysiques ou même pédagogiques.
    Je rappelle mon âge ..
    bonne nuit

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

Discussions similaires

  1. Réécriture d'adresse, vous avez dit "simple" ?
    Par Olivier Regnier dans le forum OVH
    Réponses: 10
    Dernier message: 31/12/2007, 06h31
  2. [ORA-00947]Vous avez dit bizarre ?
    Par 0xYg3n3 dans le forum Oracle
    Réponses: 0
    Dernier message: 29/09/2007, 16h21
  3. Intel vous avez dit Intel
    Par venomelektro dans le forum OpenGL
    Réponses: 7
    Dernier message: 14/10/2004, 19h25

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