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 :

[Cours Swinnen][Tkinter] bloqué à un exercice [Fait]


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [Cours Swinnen][Tkinter] bloqué à un exercice
    Bonjour,
    Je suis en train de faire tous les exercices du cours Python : cours Python de Swinnen, et je suis bloqué à l'ex 13.4 page 177. C'est à propos d'une petite application qui donne la visualisation d'une résistance quand on entre sa valeur (en ohm) dans un champ.
    Là où je bute (c'est le sujet de l'exercice), c'est quand il faut taper sur <Return> pour mettre à jour la visualisation.
    Voici le code original :
    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
     
    #! /usr/bin/env python
    # -*- coding: Latin-1 -*-
     
    class Application:
        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)
            Button(self.root, text ='Montrer',
                   command =self.changeCouleurs).grid(row =3, sticky = W)
            Button(self.root, text ='Quitter',
                   command =self.root.quit).grid(row =3, sticky = E)
            self.entree = Entry(self.root, width =14)
            self.entree.grid(row =3)
            # 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 dessineResistance(self):
            """Canevas avec un modèle de résistance à trois lignes colorées"""
            self.can = Canvas(self.root, width=250, height =100, bg ='light blue')
            self.can.grid(row =1, pady =5, padx =5)
            self.can.create_line(10, 50, 240, 50, width =5)         # fils
            self.can.create_rectangle(65, 30, 185, 70, 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,150,24):
                self.ligne.append(self.can.create_rectangle(x,30,x+12,70,
                                                            fill='black',width=0))
     
        def changeCouleurs(self):
            """Affichage des couleurs correspondant à la valeur entrée"""
            self.v1ch = self.entree.get()       # la méthode get() 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 < 10 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
                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 :
                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
     
        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()                       # instanciation de l'objet application
    et voici mon code, où j'ai ajouté une fonction changeCoul__, qui ne fonctionne pas :
    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
     
    #! /usr/bin/env python
    # -*- coding: Latin-1 -*-
     
    class Application:
        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)
            #Button(self.root, text ='Montrer',
            #      command =self.changeCouleurs).grid(row =3, sticky = W)
            Button(self.root, text ='Quitter',
                   command =self.root.quit).grid(row =3, sticky = E)
            self.entree = Entry(self.root, width =14)
            # ajout
            self.entree.bind("<Return>", self.changeCoul__)
            self.entree.grid(row =3)
            # 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 changeCoul__(event, self):
            changeCouleurs(self)
            print 'toto'
     
     
        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, pady =5, padx =5)
            self.can.create_line(10, 50, 240, 50, width =3)         # fils
            self.can.create_rectangle(65, 30, 185, 70, fill ='beige', width =5)
            # 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,150,24):
                self.ligne.append(self.can.create_rectangle(x,30,x+12,70,
                                                            fill='black',width=0))
     
        def changeCouleurs(self):
            """Affichage des couleurs correspondant à la valeur entrée"""
            self.v1ch = self.entree.get()       # la méthode get() 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 < 10 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
                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 :
                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
     
        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()                       # instanciation de l'objet application
    Quelqu'un pourrait il m'aider ?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 57
    Points : 71
    Points
    71
    Par défaut
    def changeCoul__(event, self):
    changeCouleurs(self)
    print 'toto'
    le self se trouve toujours en avants !!!!
    def changeCoul__(event, self): <== mets def changeCoul__(self,event)

    changeCouleurs(self) <== ta male mits le self

    il fauts le mettres devants
    self.changeCouleurs =10 <== pour une varibles

    mais on va recuper la valeurs, que on a entrees, sur self.entree
    CORRECTION

    def changeCoul__(self,event):
    print self.entree.get()
    #changeCouleurs(self)
    print 'toto
    conseille, donne le focus, a self.entree,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    self.entree = Entry(self.root, width =14)
            self.entree.focus() #<=== a ajouter
            # ajou
    Pour apprendre facilement Python regarde ces tutoriels et cours de formation Python : http://python.developpez.com/cours/

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Je te remercie lifido ! Ca marche.

    Je ne savais pas qu'il fallait mettre self en premier, avant "even", dans le cas où ils apparaissent tous les deux en paramètres d'une fonction.

    Euh, tu me conseilles de rajouter l'instruction self.entree.focus(). Ca fait quoi au juste ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 57
    Points : 71
    Points
    71
    Par défaut
    quands, tu lance ton .py il fauts cilque avec ta souris, sur le Entry.
    Avec le focus, tu tapes directements, en gros le focus, te mettres en avants plants, ton Entry

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bon ben je sais tout maintenant. Merci encore.

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

Discussions similaires

  1. [Python 3.X] Solution exercice 8.21 Tkinter méthode Swinnen et question
    Par papyfouette dans le forum Général Python
    Réponses: 3
    Dernier message: 15/04/2015, 22h09
  2. Cherche cours algo et POO avec exercices
    Par lepiou dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 14/04/2008, 15h15
  3. [Tkinter] probleme sur module oscillo (cours swinnen)
    Par xavier-Pierre dans le forum Tkinter
    Réponses: 4
    Dernier message: 07/03/2006, 23h12
  4. [cours de G.Swinnen] exercice 66
    Par airod dans le forum Tkinter
    Réponses: 4
    Dernier message: 14/10/2005, 11h02
  5. Un cours de C/C++ avec exercices corrigés
    Par merrheim dans le forum C++
    Réponses: 65
    Dernier message: 18/01/2005, 22h30

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