J'ai écrit le code suivant pour créer 4 boutons et après avoir cliqué sur un bouton la couleur de fond de ce bouton change et quand je clique sur un autre la couleur de celui-ci change maintenant et la couleur de l'ancien est en train de revenir à la couleur par défaut. Cela fonctionne plutôt bien mais le codage n'est pas efficace. Je pense à une boucle qui traverse tous mes boutons pour définir tous les boutons qui ne sont pas actifs à la couleur par défaut. Comment puis-je accomplir cela?Looping à travers les boutons dans tkinter
from tkinter import *
def update_Button(number):
if number == 1:
Button_1["background"] = Button_1["activebackground"] = "lightblue"
Button_2.configure(background="SystemButtonFace")
Button_3.configure(background="SystemButtonFace")
Button_4.configure(background="SystemButtonFace")
elif number == 2:
Button_2["background"] = Button_2["activebackground"] = "lightblue"
Button_1.configure(background="SystemButtonFace")
Button_3.configure(background="SystemButtonFace")
elif number == 3:
Button_3["background"] = Button_3["activebackground"] = "lightblue"
Button_2.configure(background="SystemButtonFace")
Button_1.configure(background="SystemButtonFace")
Button_4.configure(background="SystemButtonFace")
elif number == 4:
Button_4["background"] = Button_4["activebackground"] = "lightblue"
Button_2.configure(background="SystemButtonFace")
Button_3.configure(background="SystemButtonFace")
Button_1.configure(background="SystemButtonFace")
pass
root = Tk()
Button_font = ("Calibri", 20, "bold")
Button_Size = [70, 70] # width, height
pady = 5
padx = 5
Button_1 = Button(root, text="1", font=Button_font, command=lambda: update_Button(1))
Button_1.grid(sticky="wens", pady=pady, padx=padx)
Button_2 = Button(root, text="2", font=Button_font, command=lambda: update_Button(2))
Button_2.grid(sticky="wens", pady=pady, padx=padx)
Button_3 = Button(root, text="3", font=Button_font, command=lambda: update_Button(3))
Button_3.grid(sticky="wens", pady=pady, padx=padx)
Button_4 = Button(root, text="4", font=Button_font, command=lambda: update_Button(4))
Button_4.grid(sticky="wens", pady=pady, padx=padx)
root.mainloop()
comme suggère de @Mitiku la solution à l'aide d'une liste est la suivante:
def update_Button(number):
number = number-1
buttons = [Button_1, Button_2, Button_3, Button_4]
buttons[number]["background"] = buttons[number]["activebackground"] = "lightblue"
for button in buttons:
if button == buttons[number]:
pass
else:
button.configure(background="SystemButtonFace")
pass
Cela fonctionne parfaitement et est même plus que ce que j'avais en tête. Non, je veux colorer juste un bouton à la fois. Merci beaucoup! – Max2603
"Non, je veux colorer juste un bouton à la fois" que voulez-vous dire? Cela ne fait que colorer un à la fois. –
Je me suis référé à commenter ce qui semble être supprimé. – Max2603