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 :

Temps de réaction affichage aléatoire


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Par défaut Temps de réaction affichage aléatoire
    Bonjour,

    Débutante en python 3 et avec Tkinter, je m'entraîne avec le livre de Swinnen. Je suis actuellement à l'exercice 13.4 où l'on nous fournit un programme dans lequel il faut rentrer une résistance en ohms et appuyer sur un bouton pour colorer les barres d'une résistance dessinée dans un canevas. L'exercice consiste en la suppression de ce bouton afin que le changement de couleur s'opère dès qu'on appuie sur la touche entrer du clavier. Je ne suis sûrement pas très claire alors, pour le code et les instructions initiales, veuillez vous rendre à la page 175 : http://www.irem.sciences.univ-nantes...thon_notes.pdf

    Bref voilà mon problème: le programme marche mais quand je rentre ma résistance le changement opère un temps assez long après (et aléatoire j'ai l'impression) (entre 20 s et 1 minute).

    Voilà mon 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
    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
    91
    92
    93
    94
    95
    96
    97
    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('<Enter>', self.changeCoul_)
            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()
            #Code des couleurs : un petit projet bien encapsulé
     
        def changeCoul_(self, event):
            self.entree.get()
            self.changeCouleurs()
            print('rrr')
     
     
        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, 490, 100, width =3)
            # fils
            self.can.create_rectangle(150, 60, 350, 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(184,308,55):
                self.ligne.append(self.can.create_rectangle(x,60,x+22,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 < 10 or v > 1e11 :
                self.signaleErreur()
                li=[0,0,0]
                for n in range(3):
                    self.can.itemconfigure(self.ligne[n], fill =self.cc[li[n]])
            # 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
    Merci pour votre aide.

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

    A la ligne 14:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.entree.bind('<Enter>', self.changeCoul_)
    remplacez '<Enter>' par '<Return>'.

    Normalement, çà devrait être "plus réactif".
    A vous d'essayer de comprendre le "pourquoi".

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

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Par défaut
    Bonjour,

    J'avais déjà tester <Return> à la place de <Enter> et je viens de réessayer suite à ton conseil. En effet ça marche. J'avais encore quelques soucis que je ne comprenais pas mais c'est que ça ne marche qu'avec la touche 'entrée' standard de mon clavier, pas avec celle de mon clavier numérique...

    Merci beaucoup

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par rxn_dbr Voir le message
    Bonjour,

    J'avais déjà tester <Return> à la place de <Enter> et je viens de réessayer suite à ton conseil. En effet ça marche. J'avais encore quelques soucis que je ne comprenais pas mais c'est que ça ne marche qu'avec la touche 'entrée' standard de mon clavier, pas avec celle de mon clavier numérique...

    Merci beaucoup
    Bonjour,

    Jetez un oeil ici : http://infohost.nmt.edu/tcc/help/pub...key-names.html

    KP_Enter 108 65421 enter on the keypad
    @+.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 748
    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 748
    Par défaut
    Citation Envoyé par rxn_dbr Voir le message
    J'avais déjà tester <Return> à la place de <Enter> et je viens de réessayer suite à ton conseil. En effet ça marche. J'avais encore quelques soucis que je ne comprenais pas mais c'est que ça ne marche qu'avec la touche 'entrée' standard de mon clavier, pas avec celle de mon clavier numérique...
    <Enter> est un événement qui se déclenche lorsque la souris passe sur le widget.
    C'est l'opposé de <Leave>.
    Aucun rapport avec les touches <Return> ou <Enter>.
    Les langages informatiques ont des faux-amis comme n'importe quel langage.
    A vous de prendre le temps de trouver et lire une documentation, tester que çà fait bien ce que vous espérez.

    - 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. Erreur pour l'affichage aléatoire d'une image
    Par bellebiquette dans le forum Langage
    Réponses: 3
    Dernier message: 21/04/2006, 22h45
  2. Affichage aléatoire
    Par wperle dans le forum Langage
    Réponses: 5
    Dernier message: 15/12/2005, 12h54
  3. Affichage aléatoire avec coéfficients
    Par groupejtt dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 08/11/2005, 22h09
  4. [Tableaux] Temps de traitement ... affichage de page
    Par mathieu77186 dans le forum Langage
    Réponses: 37
    Dernier message: 25/10/2005, 17h45
  5. [Tableaux] Affichage aléatoire... ou presque !
    Par rafflow dans le forum Langage
    Réponses: 4
    Dernier message: 05/10/2005, 22h43

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