在Glade中制作GtkLabel填充宽度

时间:2014-09-12 13:25:43

标签: gtk glade

在Glade(版本3.8.5,因为我的目标是gtk 2.24)中,我创建了一个位于vbox行中的标签。我已将标签的背景颜色(在“属性”中)设置为蓝色,标签显示为填充整行。但蓝色背景只延伸到文本范围,而不是标签的整个宽度。 See attached image

如何让蓝条延伸到面板的边缘?

1 个答案:

答案 0 :(得分:1)

我刚才读到Gtk标签实际上并没有自己的颜色,但是它们采用了背景小部件所具有的任何颜色。我不记得这条信息的来源,但我确实记得解决方案,即将标签放在Gtk EventBox中并更改所述EventBox的颜色。我在我的gtk项目中测试了这个解决方案,效果很好。

这是我用来改变EventBox颜色的功能,就像我使用稍微旧版本的Gtk和Glade一样,而且我使用C ++就是这样,如果你正在工作使用C,您必须找到每个函数的C等价物:

void GuiUtil::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);
        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);
        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);
        colormap->alloc_color(color);
        style->set_bg(Gtk::STATE_ACTIVE, color);
    }

    widget->set_style(style);
}

据我所知,目前还没有一种方法可以使用Glade。