Как заставить кнопку менять цвета, привязав ее к классу

#python-3.x #tkinter #colors #mouseevent

#python-3.x #ткинтеръ #Цвет #mouseevent

Вопрос:

Я попытался использовать bind для привязки щелчков мыши для изменения цветов на основе переднего плана и фона кнопок

 from tkinter import *


class Clicks():
    def __init__(self, master):
        frame=Frame(master)
        frame.pack()

        #trying to bind the mouse clicks to change the color of the button

        self.button1= Button(frame, text="Click Me!", fg='red', bg='black')

        self.button1.bind("<Button-1>", fg='black')
        self.button1.bind("<Button-3>", bg='red')
        self.button1.grid(row = 0, column = 1, sticky = W)


root = Tk()
b = Clicks(root)
root.mainloop()
  

TypeError: bind() получил неожиданный аргумент ключевого слова ‘fg’

Ответ №1:

Пожалуйста, проверьте фрагмент. Здесь можно использовать 2 подхода.

Сначала вы можете bind использовать lambda функцию

 from tkinter import *
class Clicks():
    def __init__(self, master):
        frame=Frame(master)
        frame.pack()
        self.button1= Button(frame, text="Click Me!", fg='red', bg='black')
        self.button1.bind("<Button-1>", lambda event, b=self.button1: b.configure(bg="green",fg="blue"))
        self.button1.grid(row = 0, column = 1, sticky = W)
root = Tk()
b = Clicks(root)
root.mainloop()
  

Второе, что вы можете сделать, передав command функцию доступа

 from tkinter import *
class Clicks():
    def __init__(self, master):
        frame=Frame(master)
        frame.pack()
        self.button1= Button(frame, text="Click Me!",command=self.color, fg='red', bg='black')
        self.button1.grid(row = 0, column = 1, sticky = W)
    def color(self):
        self.button1.configure(bg = "green",fg="blue")
root = Tk()
b = Clicks(root)
root.mainloop()