2014-09-12 3 views
0

В Glade (версия 3.8.5, поскольку я нацелен на gtk 2.24), я создал ярлык, который находится в строке vbox. Я установил цвет фона метки (в атрибутах) на синий, и ярлык, как представляется, заполняет всю строку. Но синий фон простирается только до размера текста, а не всей ширины метки. See attached imageСоздание GtkLabel в Glade заполнить ширину

Как сделать синюю полосу шириной до края панели?

ответ

1

Я читал некоторое время назад, что метки Gtk на самом деле не имеют собственного цвета, но они принимают любой цвет, который имеет их фоновый виджет. Я не помню источник этой части информации, но я помню решение, которое заключается в том, чтобы поместить ярлык в EventBox Gtk и изменить цвет упомянутого EventBox. Я тестировал это решение в своем проекте gtk с хорошими результатами.

Это функция, которую я использую для изменения цвета EventBox, кстати, я использую несколько более старые версии Gtk и Glade, и я использую 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); 
} 

насколько я знаю, не существует способ сделать это только с поляны.

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