Для этого вы можете использовать Флажок .
Вы можете назначить функцию, которая будет изменять цвета - но на Linux она меняет цвета правильно только при наличии indicatoron=True
(значение по умолчанию).

import tkinter as tk
def change():
#print(selected.get())
if selected.get():
cb['text'] = 'Mute OFF'
cb['bg'] = 'red'
cb['activebackground'] = 'red'
#cb['highlightbackground'] = 'red'
else:
cb['text'] = 'Mute ON'
cb['bg'] = 'green'
cb['activebackground'] = 'green'
#cb['highlightbackground'] = 'green'
root = tk.Tk()
selected = tk.BooleanVar()
cb = tk.Checkbutton(root,
text="Mute ON",
bg='green',
activebackground='green',
variable=selected,
#indicatoron=False,
command=change)
cb.pack()
root.mainloop()
Но вы также можете использовать Кнопка , чтобы сделать то же самое.
Вам нужно только изменить значение в переменной, когда вы нажимаете кнопку, чтобы получить информацию, если это ON
или OFF
.

import tkinter as tk
def change():
#change value
selected.set(not selected.get())
#print(selected.get())
if selected.get():
btn['text'] = 'Mute OFF'
btn['bg'] = 'red'
btn['activebackground'] = 'red'
else:
btn['text'] = 'Mute ON'
btn['bg'] = 'green'
btn['activebackground'] = 'green'
root = tk.Tk()
selected = tk.BooleanVar(value=False)
btn = tk.Button(root,
text="Mute ON",
bg='green',
activebackground='green',
command=change)
btn.pack()
root.mainloop()