Это может быть то, что вы ищете. Это c ++, но, надеюсь, вы сможете перевести его на эквивалент Python. Код изменяет цвет фона виджета в разных состояниях.
void changeColor(Gtk::Widget* widget, double r, double g, double b) {
Glib::RefPtr<Gdk::Colormap> colormap = widget->get_colormap();
Glib::RefPtr<Gtk::Style> style = widget->get_style()->copy();
// STATE_NORMAL (most of the time)
{
Gdk::Color color;
color.set_rgb_p(r,g,b); // <-- customize this
colormap->alloc_color(color);
style->set_bg(Gtk::STATE_NORMAL, color);
}
// STATE_PRELIGHT (when mouse hovers)
{
Gdk::Color color;
color.set_rgb_p(r*0.9,g*0.9,b*0.9); // <-- customize this
colormap->alloc_color(color);
style->set_bg(Gtk::STATE_PRELIGHT, color);
}
// STATE_ACTIVE (when clicked)
{
Gdk::Color color;
color.set_rgb_p(r*0.8,g*0.8,b*0.8); // <-- customize this
colormap->alloc_color(color);
style->set_bg(Gtk::STATE_ACTIVE, color);
}
widget->set_style(style);
}
Вы заинтересованы в настройке правильных цветов в блоке STATE_PRELIGHT, чтобы они были такими же, как в блоке STATE_NORMAL. (Полагаю, это то, что вы имеете в виду под своим вопросом).
Кстати, есть два других состояния, которые не обрабатываются в методе выше: STATE_SELECTED и STATE_INSENSITIVE. Также необходимо указать, что эта функция, несмотря на название, на самом деле не меняет цвет любого виджета. Например, он не изменит цвет метки, поскольку метка принимает цвет своего контейнера. Так что не воспринимайте сигнатуру функции слишком серьезно.