отключить эффект свечения gtkbutton - PullRequest
1 голос
/ 08 марта 2011

Хотелось бы узнать, как отключить эффект свечения gtkButton при наведении мыши. Пожалуйста, помогите мне.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 08 марта 2011

Это может быть то, что вы ищете. Это 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. Также необходимо указать, что эта функция, несмотря на название, на самом деле не меняет цвет любого виджета. Например, он не изменит цвет метки, поскольку метка принимает цвет своего контейнера. Так что не воспринимайте сигнатуру функции слишком серьезно.

1 голос
/ 23 марта 2011

Следующий код Python создаст копию стиля кнопки, установит цвет фона в состоянии gtk.STATE_PRELIGHT (при наведении курсора мыши) на тот же цвет, что и gtk.STATE_NORMAL, а затем вернет стиль на виджет.

import gtk

window = gtk.Dialog()
button = gtk.Button('Click Me')

style = button.get_style().copy()
style.bg[gtk.STATE_PRELIGHT] = style.bg[gtk.STATE_NORMAL]
button.set_style(style)

window.vbox.pack_start(button)
window.show_all()
window.run()

Поскольку это не влияет на фактическое состояние кнопки, у остального кода нет побочных эффектов.

Этот код МОЖЕТ влиять на темы GDK.Если я найду для этого безопасный для темы метод, я отредактирую свой ответ.

0 голосов
/ 10 марта 2011
import gtk

def enter(widget, event):
    widget.set_state(gtk.STATE_NORMAL)
    return False

win = gtk.Dialog()
button = gtk.Button('Button')
button.connect_after('enter-notify-event', enter)
win.vbox.pack_start(button, 0, 0)
win.vbox.show_all()
win.run()
...