В разных ОС 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 шт):
В документации сказано что 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()