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 :

exercice 13.4 d'apprendre a programmer en python de gérard swinnen [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2003
    Messages : 37
    Par défaut exercice 13.4 d'apprendre a programmer en python de gérard swinnen
    Bonjour,

    je me forme avec l'aide de l'exellent livre de gérard swinnen, et la je bloque completement sur un exercice.

    J'en suis au chapitre 13 et je fais l'exercice 13.4 qui consiste a rajouter sur la zone de saisie un bind sur la touche "entré" pour valider la saisie.

    mais je bloque sur l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Users\USER\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1702, in __call__
        return self.func(*args)
    TypeError: validChangeCouleur() takes 1 positional argument but 2 were given
    voici mon code, j'ai créer une méthode dans mon objet qui appelle la méthode de changement de couleurs avec bien sur dans la phase d'init un bind de la touche entré.

    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
    #!/usr/bin/env python3
    # coding=utf-8
     
    class Application(object):
        def __init__(self):
            """Constructeur de la fenêtre principale"""
            self.root =Tk()
            self.root.title('Code des couleurs')
            self.dessineResistance()
            Label(self.root, text ="Entrez la valeur de la résistance, en ohms :").\
                grid(row =2, column =1, columnspan =3)
            Button(self.root, text ='Montrer', command =self.changeCouleurs).\
                grid(row =3, column =1)
            Button(self.root, text ='Quitter', command =self.root.quit).\
                grid(row =3, column =3)
            self.entree = Entry(self.root, width =14)
            self.entree.bind('<Return>', self.validChangeCouleur)
            self.entree.grid(row =3, column =2)
            # Code des couleurs pour les valeurs de zéro à neuf :
            self.cc = ['black','brown','red','orange','yellow',
                'green','blue','purple','grey','white']
            self.root.mainloop()
     
        def validChangeCouleur(Event):
            self.changeCouleurs()
     
        def dessineResistance(self):
            """Canevas avec un modèle de résistance à trois lignes colorées"""
            self.can = Canvas(self.root, width=500, height =200, bg ='light blue')
            self.can.grid(row =1, column =1, columnspan =3, pady =5, padx =5)
            self.can.create_line(10, 100, 480, 100, width =3)         # fils
            self.can.create_rectangle(65, 60, 420, 140, fill ='beige', width =2)
            # Dessin des trois lignes colorées (noires au départ) :
            self.ligne =[]            # on mémorisera les trois lignes dans 1 liste
            for x in range(85,190,40):
                self.ligne.append(self.can.create_rectangle(x,60,x+30,140,
                    fill='black',width=0))
     
        def changeCouleurs(self):
            """Affichage des couleurs correspondant à la valeur entrée"""
            self.v1ch = self.entree.get()       # cette méthode renvoie une chaîne
            try:
                v = float(self.v1ch)            # conversion en valeur numérique
            except:
                err =1                          # erreur : entrée non numérique
            else:
                err =0
            if err ==1 or v < 1 or v > 1e11 :
                self.signaleErreur()            # entrée incorrecte ou hors limites
            else:
                li =[0]*3                       # liste des 3 codes à afficher
                logv = int(log10(v))          # partie entière du logarithme
                if logv==0:
                    ordgr=1
                    li[0]=0
                else:
                    ordgr = 10**logv                # ordre de grandeur
                    # extraction du premier chiffre significatif :
                    li[0] = int(v/ordgr)            # partie entière
                decim = v/ordgr - li[0]         # partie décimale
                # extraction du second chiffre significatif :
                if logv==0:
                    li[1] = int(decim)       #
                    li[2] = logv 
                else:
                    li[1] = int(decim*10 +.5)       # +.5 pour arrondir correctement
                    # nombre de zéros à accoler aux 2 chiffres significatifs :
                    li[2] = logv -1
     
                # Coloration des 3 lignes :
                for n in range(3):
                    self.can.itemconfigure(self.ligne[n], fill =self.cc[li[n]])
     
        def signaleErreur(self):
            self.entree.configure(bg ='red')            # colorer le fond du champ
            self.root.after(1000, self.videEntree)      # après 1 seconde, effacer
            for n in range(3):
                    self.can.itemconfigure(self.ligne[n], fill=self.cc[0])
     
     
        def videEntree(self):
            self.entree.configure(bg ='white')          # rétablir le fond blanc
            self.entree.delete(0, len(self.v1ch))       # enlever les car. présents
     
    # Programme principal :
    if __name__ == '__main__':
        from tkinter import *
        from math import log10               # logarithmes en base 10
     
        f = Application()
    je suis conscient que le bug est entre la chaise et le clavier ;=)

    je vous remercie de m'apporter les éclaircissement nécessaire à a mon ignorance.

    cordialement.

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

    Citation Envoyé par lcrprod Voir le message
    je suis conscient que le bug est entre la chaise et le clavier ;=)
    Une méthode a toujours "self" en premier argument.

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

  3. #3
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2003
    Messages : 37
    Par défaut
    putain le gros boulet que je fais.
    Merci de m'avoir montrer mon erreur...
    cela fonctionne largement mieux maintenant....

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

Discussions similaires

  1. Meilleur livre pour apprendre à programmer en Python
    Par Guigui_ dans le forum Général Python
    Réponses: 56
    Dernier message: 13/02/2016, 00h31
  2. [Python 3.X] Apprendre à Programmer avec Python 3 G.Swinnen 8.6.2
    Par nietoparang dans le forum Général Python
    Réponses: 9
    Dernier message: 26/02/2015, 13h45
  3. Aide pour exercice livre "Apprendre à programmer en Python" par Swinnen
    Par reivilo1982 dans le forum Général Python
    Réponses: 4
    Dernier message: 28/02/2011, 12h35
  4. Apprendre à programmer avec Python exercices 4.2
    Par bellamy dans le forum Général Python
    Réponses: 5
    Dernier message: 15/10/2009, 14h53
  5. Apprendre à programmer avec Python exercices 5.14
    Par bellamy dans le forum Général Python
    Réponses: 7
    Dernier message: 02/08/2008, 10h03

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