2011-03-08 42 views

回答

1

以下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

为了避免gdk主题问题*可能*我找到了一个解决方案:您可以在小部件实现后应用该样式。使用'widget.connect('实现',函数)',然后添加一个执行样式复制/编辑/应用方法的函数。 – musicamante 2015-10-13 00:25:59

2

这可能是你在找什么。它是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_NORMAL块相同的STATE_PRELIGHT块设定正确的颜色。 (我猜这是你的意思,你的问题)。

顺便说一下,还有两个其他状态不在上述方法中处理:STATE_SELECTED和STATE_INSENSITIVE。还必须说明的是,尽管它的名字是这个函数,但实际上并没有改变任何小部件的颜色。例如,它不会更改标签的颜色,因为标签采用它的容器颜色。所以不要太认真对待功能签名。

0
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() 
+0

这有效,但如果小部件的状态对代码中的其他内容很重要,则可能会导致问题。相反,改变按钮的样式可能会更好。 – 2011-03-22 22:45:59