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 :

Changer l'image d'un bouton en cliquant dessus


Sujet :

Tkinter Python

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 283
    Points
    283
    Par défaut Changer l'image d'un bouton en cliquant dessus
    Bonjour,

    lorsque je clique sur le bouton, la couleur de fond change mais pas l'image et le bouton n'est plus cliquable. Pourriez-vous m'aider svp à changer l'image du bouton sur simple clic? Merci d'avance.

    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
    from tkinter import *
    from PIL import ImageTk, Image
     
    L = 600
    H = 500
    root = Tk()
    root.geometry('{}x{}'.format(L, H))
     
    conteneur = Frame(root, bg='red')    
    conteneur.pack(fill=X)
     
    class BtnJoker(Button):
            def on_clickJoker(self):
                print("mon Bouton")    
                if self["bg"]== "green":
                    #self.configure(self, bg="red")    
                    img1 = Image.open('JokerGreen.png')
                    image1=img1.resize((30,25))
                    useImg1 = ImageTk.PhotoImage(image1)
                    self.configure(self, bg="red", image=useImg1)
                    print("green")
     
                elif self["bg"]== "red":
                    #self.configure(self, bg="green")
                    print("red")    
                    img1 = Image.open('JokerRed.png')
                    image1=img1.resize((30,25))
                    useImg1 = ImageTk.PhotoImage(image1)
                    self.configure(self, bg="green", image=useImg1 )
                    print("red")
     
     
    img1 = Image.open('JokerGreen.png')
    image1=img1.resize((30,25))
    useImg1 = ImageTk.PhotoImage(image1)
    for n in range(1,6):
            newBtn = BtnJoker(conteneur, bg="green", image=useImg1)
            newBtn.grid(row=0, column=n)
            newBtn['command'] = newBtn.on_clickJoker # ajout de l'action à exécuter

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 283
    Points
    283
    Par défaut
    J'ai trouvé la solution :

    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
    from tkinter import *
    from PIL import ImageTk, Image
     
    L = 600
    H = 500
    root = Tk()
    root.geometry('{}x{}'.format(L, H))
     
    conteneur = Frame(root, bg='red')    
    conteneur.pack(fill=X)
     
    class BtnJoker(Button):
            def on_clickJoker(self):
                print("mon Bouton")    
                if self["bg"]== "green":
                    img2 = Image.open('JokerRed.png')
                    image2=img2.resize((30,25))
                    useImg2 = ImageTk.PhotoImage(image2)
                    #self.config(self, bg="red", image=useImg2)
                    print("green")
                    self.config(self, bg="red", image=useImg2)
                    self.image = useImg2
     
                elif self["bg"]== "red":
                    print("red")
                    self.configure(self, bg="green")
                    img1 = Image.open('JokerGreen.png')
                    image1=img1.resize((30,25))
                    useImg1 = ImageTk.PhotoImage(image1)
                    self.configure(self, bg="green", image=useImg1)
                    self.image = useImg1
                    print("red")
     
     
    img1 = Image.open('JokerGreen.png')
    image1=img1.resize((30,25))
    useImg1 = ImageTk.PhotoImage(image1)
    for n in range(1,6):
            newBtn = BtnJoker(conteneur, bg="green", image=useImg1)
            newBtn.grid(row=0, column=n)
            newBtn['command'] = newBtn.on_clickJoker # ajout de l'action à exécuter

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 347
    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 347
    Points : 36 870
    Points
    36 870
    Par défaut
    Toujours aussi compliqué!
    Je ne comprends pas pourquoi il vous semble indispensable de lire l'image à chaque fois.
    Plus concis, ça donnerait:
    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
    import tkinter as tk
    from PIL import Image, ImageTk
     
    COLORS = ('red', 'green')
    joker_images = {}
     
    def toggle(btn):
        color = COLORS[btn['bg']=='red']
        image = joker_images[color]
        btn.configure(image=image, bg=color)
     
    root = tk.Tk()
     
    for color in COLORS:
        im = Image.open('joker_%s.png' % color).resize((30, 25))
        joker_images[color] = ImageTk.PhotoImage(im)
     
    for _ in range(6):
        btn = tk.Button(image=joker_images['red'], bg='red')
        btn['command'] = lambda btn=btn: toggle(btn)
        btn.pack(side='left')
     
    tk.mainloop()
    - W

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

Discussions similaires

  1. [Python 3.X] Changer la couleur d'un bouton en cliquant dessus
    Par OsefforT dans le forum Tkinter
    Réponses: 1
    Dernier message: 04/02/2015, 20h07
  2. Changer l'image d'un bouton sur événement onmouseover
    Par CinePhil dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 22/04/2012, 23h12
  3. Réponses: 6
    Dernier message: 16/01/2008, 15h37
  4. changer l'image dans un bouton
    Par Willthelegend dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 20/02/2007, 20h39
  5. [FLASH MX2004] Changer l'image d'un bouton
    Par exe dans le forum Flash
    Réponses: 3
    Dernier message: 05/12/2004, 14h26

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