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 :

[tkinter] : 'NoneType' object has no attribute 'get' [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Janvier 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ergonome
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 17
    Par défaut [tkinter] : 'NoneType' object has no attribute 'get'
    Bonsoir

    Après avoir passé de nombreuses heures à éplucher sites, articles, livres et forums, je parvient pas à trouver la solution à mon problème...

    Je suis sur un projet de NSI (la nouvelle spécialité apparue avec la réforme du bac) et personnes n'a pu jusqu’à présent m'aider (professeur, camarades...)

    Le but est de concevoir un interface graphique avec tkinter qui permet d'utiliser des fonctions elles aussi réalisée par nos soins.

    J'ai achevé d'écrire les fonctions qui permettes la manipulations de chaînes de caractères et elles fonctionnes toutes. J'ai également achevé la partie graphique du projet, mais la partie logique du programme avec une zone de saisie me résiste...

    Voici le code de mon interface tkinter... Manip_Chaines est le fichier qui contient les fonctions de transformation des chaines. Pour le moment, seul le bouton en haut à gauche (bouton 1)est
    associé à une commande car il me sert de teste...
    Voici le code :
    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
    # coding: utf-8
    from tkinter import*
    from Manip_chaines import*
     
    def un ():
        mot=saisie.get()
        label_reponse.configure(text=question1(mot))
     
    #créer la fenêtre principale
    f1=Tk()
    f1.title("Mon projet tkinter")#change le titre la fenêtre
    f1.iconbitmap("logo.ico")#change le logo de la fenêtre
    f1.config(bg='#191919')
    f1.attributes('-fullscreen', 1)#met la fenêtre en plein écran
     
    frame1=Frame (f1, bg='#191919', relief='sunken', bd=2)#crée une boite indépendante pour le titre
    frame1.pack(fill=X)
    frame3=Frame (f1, bg='#191919', relief='sunken', bd=2)#crée une troisième boite pour la saisie et la réponse
    frame3.pack(fill=X, pady=17)
    frame2=Frame (f1, bg='#191919', relief='sunken', bd=2)#cré une seconde boite indépendante pour les boutons
    frame2.pack(fill=X)
     
     
    etqt1= Label (frame1, text="Que voulez-vous faire ?", font=("Uni Sans", 50), bg='#191919', fg='#ffffff').pack(pady=10)
    etqt2= Label (frame1, text="Bienvenue ! Entre ton mot à gauche, choisis une option et découvre le résultat à droite !", font=('Uni Sans', 20), bg='#191919', fg='white').pack()#créer l'étiquettre "que voulez-vous faire?"
     
    saisie=Entry (frame3, bg='white', font=("Courrier",20), width=35, fg='black').grid(row=0, column=0, padx=50)
    label_reponse=Label (frame3, text="Réponse", bg='white', font=("Courrier",20), width=35, fg='black').grid(row=0, column=1, padx=260)
     
    fo=("Courrier", 30)
    bg="#7289da"
    abckd="#03396c"
    actfd="white"
    fg="white"
    bd=0
    width=15
    height=5
     
    #crée les boites de droite à gauche et de haut en bas
    B1=Button (frame2, text="Met votre mot \n à l'envers", font=fo, bg=bg, activebackground=abckd, activeforeground=actfd, fg=fg, bd=bd, width=width, height=height, command=un).grid(row=0, column=0, padx=10, pady=20)
    B2=Button (frame2, text="Met une étoile \n entre chaque lettre", font=fo, bg=bg, activebackground=abckd, activeforeground=actfd, fg=fg, bd=bd, width=width, height=height).grid(row=0, column=1, padx=20, pady=20)
    B3=Button (frame2, text="Met une étoile \n entre chaque lettre \n sauf espace", font=fo, bg=bg, activebackground=abckd, activeforeground=actfd, fg=fg, bd=bd, width=width, height=height).grid(row=0, column=2, padx=20, pady=20)
    B4=Button (frame2, text="Affiche autant \n d'étoiles \n que de lettres \n dans le mot", font=fo, bg=bg, activebackground=abckd, activeforeground=actfd, fg=fg, bd=bd, width=width, height=height).grid(row=0, column=3, padx=20, pady=20)
    B5=Button (frame2, text="Affiche 1 fois \n la 1ere lettre\n 2 fois la 2eme, etc", font=fo, bg=bg, activebackground=abckd, activeforeground=actfd, fg=fg, bd=bd, width=width, height=height).grid(row=1, column=0, padx=10, pady=20)
    B6=Button (frame2, text="Affiche le mot \n sans les voyelles", font=fo, bg=bg, activebackground=abckd, activeforeground=actfd, fg=fg, bd=bd, width=width, height=height).grid(row=1, column=1, padx=20, pady=20)
    B7=Button (frame2, text="Met les consonnes \n au début et \n les voyelles à la fin", font=fo, bg=bg, activebackground=abckd, activeforeground=actfd, fg=fg, bd=bd, width=width, height=height).grid(row=1, column=2, padx=20, pady=20)
    B8=Button (frame2, text="Calcule le nombre \n de points au \n scrabble \n pour le mot", font=fo, bg=bg, activebackground=abckd, activeforeground=actfd, fg=fg, bd=bd, width=width, height=height).grid(row=1, column=3, padx=20, pady=20)
     
     
     
    Button(frame2, text="Quitter",font=20, command=f1.destroy, bg='red', fg='white',bd=1, relief=GROOVE, width=7, height=1).grid(row=2, column=3)#bouton quitter car difficile en plein écran
    f1.mainloop()

    Et voici la 1ère fonction de Manip_Chaines... Je n'ai pas jugé utile de mettre les autres car elles ont toutes une structure semblable...

    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
    # coding: utf-8
    def question1(mot):
        """met une chaine de caractère à l'envers
    >>> question1("Dupuy de Lome")
    'emoL ed yupuD'
    """
        mle=""
        for l in range(0,len(mot)):
            mle=mle+mot[len(mot)-1-l]
        return(mle)
     
     
    if __name__=="__main__":
        import doctest
        doctest.testmod()
    En théorie, je doit rentrer un mot, cliquer sur le bouton qui effectue la manipulation et le programme me renvoi un résultat. Dans les faits, lors du clique sur le bouton,
    le message d'erreur 'NoneType' object has no attribute 'get' s'affiche dans la console, l'origine et la cause de cette erreur m'échappe car il me semble pourtant avoir une rédaction correcte...

    Voilà, merci d'avance pour votre aide

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

    Citation Envoyé par Salicandre Voir le message
    En théorie, je doit rentrer un mot, cliquer sur le bouton qui effectue la manipulation et le programme me renvoi un résultat. Dans les faits, lors du clique sur le bouton,
    le message d'erreur 'NoneType' object has no attribute 'get' s'affiche dans la console, l'origine et la cause de cette erreur m'échappe car il me semble pourtant avoir une rédaction correcte...
    Relisez votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def un ():
        mot=saisie.get()
        label_reponse.configure(text=question1(mot))
    Le message d'erreur doit même vous indiquer la variable "saisie" et s'il y a None dedans, il faut aller chercher la dernière fois que vous y avez assigné quelque chose.

    C'est à la ligne 27:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saisie=Entry (frame3, bg='white', font=("Courrier",20), width=35, fg='black').grid(row=0, column=0, padx=50)
    qu'il faut décomposer en 2 lignes: saisie = Entry(....) puis saisie.grid(...)
    Et c'est valable pour les appels de méthode sur tous les objets "mutables" (et non sur les objets non mutables).
    Ce que vous avez certainement remarqué avec des objets comme les "str":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s = "ABC".lower() # çà marche car un "str" n'est pas mutable
    par contre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L = [3, 2, 1].sort() # et vous avez None dans L
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Janvier 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ergonome
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 17
    Par défaut
    Super, Merci beaucoup

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/05/2014, 14h23
  2. Réponses: 3
    Dernier message: 04/03/2014, 22h41
  3. Réponses: 2
    Dernier message: 06/07/2012, 19h38
  4. AttributeError "nonetype" object has no attribute
    Par Invité dans le forum Général Python
    Réponses: 2
    Dernier message: 14/12/2010, 20h49
  5. Réponses: 2
    Dernier message: 26/05/2006, 14h48

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