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 :

Mettre en couleur un bouton en appuyant sur une touche du clavier


Sujet :

Python

  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 10
    Par défaut Mettre en couleur un bouton en appuyant sur une touche du clavier
    Bonjour,

    Nous sommes actuellement sur un projet et nous bloquons à un endroit....
    Nous aimerions savoir comment faut-il faire pour que quand je touche une touche de mon clavier, le bouton se mette en couleur ?
    (Etant encore novice dans le langage python, nous ne savons pas encore toute les options que l'on peut mettre pour perfectionner nos programmes)
    Nous avons utilisé la fonction la fonction bind pour pouvoir associer une touche à un événement.

    Bonne soirée et merci d'avance pour vos potentiels aides

    Merci

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

    Citation Envoyé par Lulu et Mel ISN Voir le message
    (Etant encore novice dans le langage python, nous ne savons pas encore toute les options que l'on peut mettre pour perfectionner nos programmes)
    Pas grand monde ne les connaît, c'est pour çà qu'il y a des documentations dans lesquelles il est bon de se replonger plus ou moins souvent. Pour les Buttons, c'est (par exemple) ici.

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

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 10
    Par défaut
    Oui, mais cela nous l'avons fait, quand avec la souris on appuies sur le bouton, il change de couleur . Mais quand nous appuyons sur les touches du clavier pour que le bouton marche, la couleur ne change pas et nous aimerions bien savoir comment on pourrait faire ( pour que quand on appuies avec le clavier, le bouton se mette en couleur) ?
    S'il vous plaît

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par Lulu et Mel ISN Voir le message
    Mais quand nous appuyons sur les touches du clavier pour que le bouton marche, la couleur ne change pas et nous aimerions bien savoir comment on pourrait faire ( pour que quand on appuies avec le clavier, le bouton se mette en couleur) ?
    Il faut que l'action sur le clavier déclenche un callback (déclaré avec .bind et qui fonctionnera si le widget a le focus).... Et dans ce callback on modifie la couleur du Button ou on force un appui dessus via .invoke.
    note: si le problème n'est pas "changer la couleur du Button", il faut l'exprimer plus clairement. Poster le code que vous avez essayé de faire aiderait beaucoup si vous ne trouvez pas les mots qui vont bien.

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

  5. #5
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 10
    Par défaut
    Voici le programme :
    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
    from tkinter import*
    import winsound
    liste=[523,587,639,698,784,880,988,1046]  
    def note(i):
        frequence=liste[i]
        winsound.Beep(frequence,500)
     
    def touche1():    
        note(0)
    def touche2():
        note(1)
    def touche3():
        note(2)
    def touche4():
        note(3)
    def touche5():
        note(4)
    def touche6():
        note(5)
    def touche7():
        note(6)
    def touche8():
        note(7)
     
    def pointeur(evt):           
        if evt.char=='a':
            note(0)
        elif evt.char=='z':
            note(1)
        elif evt.char=='e':
            note(2)
        elif evt.char=='r':
            note(3)
        elif evt.char=='t':
            note(4)
        elif evt.char=='y':
            note(5)
        elif evt.char=='u':
            note(6)
        elif evt.char=='i':
            note(7)
     
     
    fen1= Tk()
     
    bou11= Button(fen1,bg="white",height=40,width=18,activebackground='purple',command=touche1)  
    bou11.grid(row=0,column=0)
    bou12= Button(fen1,bg="white",height=40,width=18,activebackground='pink',command=touche2)  
    bou12.grid(row=0,column=1)
    bou13= Button(fen1,bg="white",height=40,width=18,activebackground='red',command=touche3)
    bou13.grid(row=0,column=2)
    bou14= Button(fen1,bg="white",height=40,width=18,activebackground='orange',command=touche4)
    bou14.grid(row=0,column=3)
    bou15= Button(fen1,bg="white",height=40,width=18,activebackground='yellow',command=touche5)
    bou15.grid(row=0,column=4)
    bou16= Button(fen1,bg="white",height=40,width=18,activebackground='green',command=touche6)
    bou16.grid(row=0,column=5)
    bou17= Button(fen1,bg="white",height=40,width=18,activebackground='cyan',command=touche7)
    bou17.grid(row=0,column=6)
    bou18= Button(fen1,bg="white",height=40,width=18,activebackground='blue',command=touche8)
    bou18.grid(row=0,column=7)
     
     
     
    fen1.bind('a', pointeur)  
    fen1.bind('z', pointeur)
    fen1.bind('e', pointeur)
    fen1.bind('r', pointeur)
    fen1.bind('t', pointeur)
    fen1.bind('y', pointeur)
    fen1.bind('u', pointeur)
    fen1.bind('i', pointeur)
     
     
    fen1.mainloop()

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

    Et où dans ces nombreuses lignes laborieusement recopiée essayez vous de modifier un Button?
    A la place de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def pointeur(evt):           
        if evt.char=='a':
            note(0)
    vous pourriez écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def pointeur(evt):           
        if evt.char=='a':
            bou11.invoke()
        ...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 10
    Par défaut
    je viens d'essayer et ça n'a pas l'air de marcher.... ( alors on avait essayé d'y mettre à la fin du programme dans les parenthèses en le mettant comme widget)

    ça me marque cela : T
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    raceback (most recent call last):
      File "F:\Terminale\ISN\mini-projet  piano bis.py", line 65, in <module>
        fen1.bind('a', pointeur,colour="purple") 
    TypeError: bind() got an unexpected keyword argument 'colour'

  8. #8
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 10
    Par défaut
    Je viens de réussir à lancé le programme , mais quand j'appuies sur la touche de clavier ça ne me mets pas la couleur

  9. #9
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut,

    Si tu ne montres pas chaque fois où tu en es dans ton script, personne ne peut deviner où se situent tes erreurs.
    Tout ça pour dire, poste ton code actuel afin que quelqu'un puisse t'aiguiller à résoudre tes problèmes

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

    Ah oui, je comprends, avec .invoke, on a la musique mais pas le "visuel" comme quand on clique sur le Button.
    On peut essayer de simuler le clic comme çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from tkinter import Button, Tk
     
    root = Tk()
    btn = Button(bg="white", height=20, width=10,
                 activebackground="purple", command=lambda: print('***'))
    btn.pack()
     
    def toggle(e):
        btn.after_idle(lambda: btn.event_generate('<ButtonPress-1>'))
        btn.after(100, lambda: btn.event_generate('<ButtonRelease-1>'))
     
    root.bind('<s>', toggle)
    root.mainloop()
    i.e. dans toggle les .event_generate "simule" l'appui et le relâchement du Button.
    Mais (en tous cas chez moi) cela fonctionne "de temps en temps".
    Une mouture un peu plus fiable serait:
    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
    from tkinter import Button, Tk
     
    root = Tk()
    btn = Button(bg="white", height=20, width=10,
                 activebackground="purple", command=lambda: print('***'))
    btn.pack()
    def toggle(e):
     
        bg = btn.cget('bg')
        btn.invoke()
        btn.configure(bg=btn.cget('activebackgroung'))
        btn.after(100, lambda: btn.configure(bg=bg))
     
    root.bind('<s>', toggle)
    root.mainloop()
    Dans ce cas, on appelle la commande associée et on fait de la peinture pour changer la couleur du Button comme si...

    Au bout du bout, on peut fabriquer son Button améliorant .invoke:
    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
    import tkinter as tk
     
    class Button(tk.Button):
        def invoke(self):
            super().invoke()
            bg = self.cget('bg')
            self.configure(bg=self.cget('activebackground'))
            self.after(100, lambda: btn.configure(bg=bg))
     
     
    root = tk.Tk()
    btn = Button(bg="white", height=20, width=10,
                 activebackground="purple", command=lambda: print('***'))
    btn.pack()
     
    root.bind('<s>', lambda e: btn.invoke())
    root.mainloop()

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

  11. #11
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 10
    Par défaut Merci
    Nous avons essayé, et ça a marché, merci beaucoup vraiment ☺☺

  12. #12
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2023
    Messages : 1
    Par défaut Problème de changement de couleurs lié aux touches
    Bonjour, actuellement pour un projet d'études je dois réaliser un changement de couleur de fond de canevas par le biais d'une touche clavier.

    J'utilise le code suivant pour ce faire :
    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
     
      def clavierAV(event):
        global i
        touche = event.keysym
        print(touche)
        if touche == 'z':
            i+=1
        else:
            i=0
        print(i)
        return(i)
     
     
     
    #Canvas pour les touches
    canvasAV=Canvas(frametouches, height=80, width=80,background="white")
    canvasDR=Canvas(frametouches, height=80, width=80,background="white")
    canvasGA=Canvas(frametouches, height=80, width=80,background="white")
    canvasAR=Canvas(frametouches, height=80, width=80,background="white")
     
    #Méthodes pour changer la couleur des canevas
    i=0
    if i > 0:
        canvasAV = Canvas(frametouches, height=80, width=80, background="green")
    Et j'utilise un .bind("<key>",clavierAV) à la fin de mon programme et ça fonctionne, partiellement cela dit, je reçois dans la console la valeur de i et la touche appuyée mais pas de changement du coté de la couleur de mon canevas. Est il possible de résoudre ce problème sans faire appel à des méthodes trop complexes?

  13. #13
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 327
    Par défaut
    bonjour et bienvenue

    Il faut créer un nouveau sujet aux lieux de déterrer un sujet qui n'a qu'une lointaine parenté avec ton problème

    Nous devons baliser notre code pour qu'il puisse bien apparaitre ici. Donc ton code est simplement incompréhensible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    i=0
    if i > 0:
       canvasAV = Canvas(frametouches, height=80, width=80, background="green")
    Si c'est bien ton code ?
    i est égal à zero, puis si (par un énorme miracle: entre ma ligne 1 et 2, il se passe moins d'une nano seconde, tu es un rapide du clavier) i est supérieur à 0, alors faire une action Et lorsque je parle d"une action", c'est un grand mot.

    sans faire appel à des méthodes trop complexes
    Dans un premier temps, peut-être ne pas forcer la valeur 0 pour i ? est bon début
    "un projet d'étude", cela normalement signifie que l'on a fait des cours avant, sinon, il est temps de les commencer. Et je suis désolé, mais tkinter est complexe pour un grand débutant.

Discussions similaires

  1. Comment ajouter un bouton copie couleur céllule sur la barre TinyMce ?
    Par hightone1999 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 08/06/2012, 17h23
  2. couleur sur un bouton radio
    Par mauyebo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/08/2010, 09h31
  3. changement couleur sur sélection radio boutons
    Par sauceaupistou dans le forum ASP
    Réponses: 2
    Dernier message: 19/04/2007, 12h21
  4. [JButton] getContenPane() et couleur sur les boutons
    Par harris_macken dans le forum Composants
    Réponses: 4
    Dernier message: 05/06/2005, 07h31
  5. Aide pour changer de couleur sur les primitifs GLUT
    Par romainhoarau2764 dans le forum GLUT
    Réponses: 3
    Dernier message: 19/03/2005, 14h30

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