更改GtkLabel前景色

时间:2018-06-22 11:57:40

标签: c gtk3 pango

我编写了一个简单的函数,目的是更改GtkLabel的文本和颜色。 麻烦是(当然):它不起作用。 正确设置了“状态”中包含的文本,但未设置颜色。

我使用Pango属性进行设置,但是没有办法。 调用就像:_SetStatus(context,“ Running”,“ green”);

GUI_ERR_HDL _SetStatus(GuiContext *context, const gchar *status, const gchar *color) {
GtkLabel *lbl;
PangoAttrList *pngList;
PangoAttribute *pngFgColor;
GdkRGBA rgba;
guint16 r;
guint16 g;
guint16 b;

lbl=GTK_LABEL(gtk_builder_get_object(context->builder, 
    (gchar*)OPENSESSION_LBL_STATUS));

pngList=gtk_label_get_attributes(lbl);

gdk_rgba_parse(&rgba, color);

r=(guint16)rgba.red*255;
g=(guint16)rgba.green*255;
b=(guint16)rgba.blue*255;

pngFgColor=pango_attr_foreground_new(r,g,b);
pango_attr_list_change(pngList, pngFgColor);

gtk_label_set_attributes(lbl, pngList);
gtk_label_set_label(lbl, status);

return NO_ERR;
}

有什么想法吗?

谢谢。

Vincent。

2 个答案:

答案 0 :(得分:1)

我建议使用gtk_label_set_markup(标记描述为here)。

here描述了另一种方法(更复杂)。

在两种情况下,您都应该了解,用户可以使用第三方主题,并且更改颜色会使内容不可读

答案 1 :(得分:0)

在我的应用程序中,我这样做:

const static GdkRGBA rgba_color = {.red = 0.0, .green = 1.0, .blue = 0.0, .alpha = 1.0};
gtk_widget_override_color(label_xyz, GTK_STATE_FLAG_NORMAL, &rgba_color);

我在应用程序中没有使用任何Pango函数。