2015-08-03 4 views
1

В настоящее время я пытаюсь внедрить код в свою программу, чтобы обновить цвет кнопок, когда пользователь наводит курсор мыши на него. Программа распознает зависание, но возвращает ошибку.Привязка цвета к кнопке в результатах Tkinter в TclError

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python34\lib\tkinter\__init__.py", line 1482, in __call__ 
    return self.func(*args) 
    File "C:\Users\oiest\Documents\Programs\iNTMI\v1.1.3b\iNTMI.py", line 252, in <lambda> 
    achievementsButton.bind("<Enter>", lambda event: achievementsButton.configure(bg = "red")) 
    File "C:\Python34\lib\tkinter\__init__.py", line 1270, in configure 
    return self._configure('configure', cnf, kw) 
    File "C:\Python34\lib\tkinter\__init__.py", line 1261, in _configure 
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf)) 
_tkinter.TclError: unknown option "-bg" 

У меня был Googled, как изменить цвет при наведении курсора и найти следующий код. Хотя по какой-то причине это не работает для меня. Что я делаю не так?

achievementsButton.bind("<Enter>", lambda event: achievementsButton.configure(bg = "red")) 
    achievementsButton.bind("<Leave>", lambda event: achievementsButton.configure(bg = "white")) 

Это код, из которого я изначально определил достиженийButton.

achievementsButton = ttk.Button(self, text = "Achievements", command = lambda: controller.show_frame(achievements), width = "25") 

ответ

2

ttk.Button экземпляры не имеют bg или background атрибут. Существует два решения:

  • Используйте обычный tkinter.Button, который имеет атрибут bg.
  • Продолжайте использовать ttk.Button и настройте его с помощью объекта стиля. См. Using and customizing ttk styles для получения дополнительной информации. Пример:

 

from Tkinter import * 
import ttk 
root = Tk() 
s = ttk.Style() 
s.configure("regular.TButton", background="red") 
s.configure("onhover.TButton", background="white") 
button = ttk.Button(root, style="regular.TButton") 
button.pack() 
button.bind("<Enter>", lambda event: button.configure(style="onhover.TButton")) 
button.bind("<Leave>", lambda event: button.configure(style="regular.TButton")) 
root.mainloop() 

Однако это будет только изменить цвет фона области за фактической кнопки, а не лицом кнопки. This сообщение, похоже, указывает на то, что невозможно изменить цвет лица кнопки ttk.

+0

Итак, нет реального способа сохранить красивый дизайн кнопок Windows 7/8/10 с помощью ttk? Это немного разочаровывает, но ты помог мне. Спасибо. – orias

Смежные вопросы