В разных ОС pyhton tkinter работает по разному (цвет кнопки)

Пишу свой маленький учебный проект на python. Сделал интерфейс с помощью tkinter. Работаю иногда под windows 10 иногда под ubuntu. И обнаружил такой эффект - хочу сделать чтобы кнопка в состоянии покоя была одним цветом, при наведении вторым, а при нажатии третьим. Под виндой всё работает, но под ubuntu эффект от наведения на кнопку ведёт себя совсем не так. Вот минимальный рабочий фрагмент кода

#!/usr/bin/python3.8
import tkinter as tk


def set_color(event):
    event.widget.config(bg='gray', activebackground='orange')


def restore_color(event):
    event.widget.config(bg='white')


root = tk.Tk()
root.geometry('300x200')

# создание и размещение кнопки
button = tk.Button(root, text='ПУСК', font='tahoma 40', bg='white')
button.place(relx=0.5, rely=0.5, anchor='center')

# смена цвета при наведении
button.bind('<Enter>', set_color)
button.bind('<Leave>', restore_color)

root.mainloop()

В windows кнопка по-умолчанию белая, при наведении серая, при нажатии оранжевая. Под ubuntu она белая, при наведении оранжевая и такая же при нажатии. Почему так?


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

В документации сказано что activebackground задаёт цвет кнопки под курсором мыши. Видимо, в Windows это свойство ошибочно игнорируется. Для решения проблемы на обеих платформах надо управлять цветами в ручном режиме:

import tkinter as tk

root = tk.Tk()
root.geometry('300x200')

button = tk.Button(root, text='text')
button.place(relx=0.5, rely=0.5, anchor='center')


def paint(color):
    button.config(bg=color, activebackground=color)


paint('white')

button.bind('<Enter>', lambda e: paint('gray'))
button.bind('<Leave>', lambda e: paint('white'))
button.bind('<Button-1>', lambda e: paint('orange'))
button.bind('<ButtonRelease-1>', lambda e: paint('gray'))

root.mainloop()
→ Ссылка