Gtk+ 3.0 改变状态栏字体颜色

Posted

技术标签:

【中文标题】Gtk+ 3.0 改变状态栏字体颜色【英文标题】:Gtk+ 3.0 change fontcolor of statusbar 【发布时间】:2014-12-17 17:42:08 【问题描述】:

如何更改状态栏的字体颜色?

我不知道。

我找到了gtk_widget_modify_text但不知道怎么用!

编辑:

我试过了,但没有用:

GdkRGBA font_color;
font_color.red = 1;
font_color.green = 0;
font_color.blue = 0;
font_color.alpha = 1;
gtk_widget_override_color(statusbar, GTK_STATE_FLAG_NORMAL, &font_color);

【问题讨论】:

到目前为止你尝试了什么?您是否尝试阅读manual? 【参考方案1】:

您可以使用gtk_widget_override_color 并将其与GTK_STATE_FLAG_NORMAL 和您希望设置的相应GdkRGBA 颜色一起使用。有关详细信息,请参阅reference。

这是一个用vala写的例子:

using Gtk;

public class Application : Gtk.Window 
        public Application () 
                this.destroy.connect (Gtk.main_quit);
                this.set_default_size (100, 50);

                Gtk.Statusbar bar = new Gtk.Statusbar ();
                this.add(bar);

                uint context_id = bar.get_context_id ("example");
                bar.push (context_id, "Message ...");

                Gdk.RGBA font_color = Gdk.RGBA ();
                font_color.red=0.5;
                font_color.green=0;
                font_color.blue=0;
                font_color.alpha=1;
                bar.override_color (Gtk.StateFlags.NORMAL, font_color);
        

        public static int main (string[] args) 
                Gtk.init (ref args);

                Application app = new Application ();
                app.show_all ();
                Gtk.main ();
                return 0;
        

这是一个 C 示例。它是statusbar example 的修改版。

#include <stdlib.h>
#include <gtk/gtk.h>
#include <glib.h>

GtkWidget *status_bar;

static void push_item( GtkWidget *widget,
                       gpointer   data )

  static int count = 1;
  gchar *buff;

  buff = g_strdup_printf ("Item %d", count++);
  gtk_statusbar_push (GTK_STATUSBAR (status_bar), GPOINTER_TO_INT (data), buff);
  g_free (buff);


int main( int   argc,
          char *argv[] )


    GtkWidget *window;
    GtkWidget *vbox;
    GtkWidget *button;

    gint context_id;

    gtk_init (&argc, &argv);

    /* create a new window */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_widget_set_size_request (GTK_WIDGET (window), 200, 100);
    gtk_window_set_title (GTK_WINDOW (window), "GTK Statusbar Example");
    g_signal_connect (window, "delete-event",
                      G_CALLBACK (exit), NULL);

    vbox = gtk_vbox_new (FALSE, 1);
    gtk_container_add (GTK_CONTAINER (window), vbox);
    gtk_widget_show (vbox);

    status_bar = gtk_statusbar_new ();      
    gtk_box_pack_start (GTK_BOX (vbox), status_bar, TRUE, TRUE, 0);
    gtk_widget_show (status_bar);

    /* here comes the color change */
    GdkRGBA font_color;
    font_color.red = 1;
    font_color.green = 0;
    font_color.blue = 0;
    font_color.alpha = 1;
    gtk_widget_override_color(status_bar, GTK_STATE_FLAG_NORMAL, &font_color);

    context_id = gtk_statusbar_get_context_id(
                          GTK_STATUSBAR (status_bar), "Statusbar example");

    button = gtk_button_new_with_label ("push item");
    g_signal_connect (button, "clicked",
                      G_CALLBACK (push_item), GINT_TO_POINTER (context_id));
    gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 2);
    gtk_widget_show (button);              

    /* always display the window as the last step so it all splashes on
     * the screen at once. */
    gtk_widget_show (window);

    gtk_main ();

    return 0;

【讨论】:

在文本框工作,但不在状态栏工作 截图不显示你想要达到的效果吗? 不工作,因为我使用 GTK 版本 3,状态栏不再是一个容器,所以它不起作用! 我用 pkg-config --cflags gtk+-3.0pkg-config --libs gtk+-3.0 编译它并且它工作。 对了,官方reference竟然说是继承自GtkContainer。【参考方案2】:

我认为您需要检索状态栏的“标签”小部件来更改其属性。此代码更改状态栏的字体和大小(GTK 2):

PangoFontDescription *pfd = pango_font_description_from_string("Consolas 8");
GtkWidget *w = gtk_statusbar_get_message_area(GTK_STATUSBAR(statusbar));
GList *gl = gtk_container_get_children(GTK_CONTAINER(w));
GtkWidget *ch = GTK_WIDGET(gl->data);
GtkLabel *label = GTK_LABEL(ch);
printf("Number of children: %d  Text: %s\n", g_list_length(gl), gtk_label_get_text(label)); 
//prints 1 and the current message of the statusbar
gtk_widget_modify_font(ch, pfd);
g_list_free(gl);
pango_font_description_free(pfd);

【讨论】:

以上是关于Gtk+ 3.0 改变状态栏字体颜色的主要内容,如果未能解决你的问题,请参考以下文章

[已解决]状态栏的字体怎样改变颜色?(已解决)

状态栏怎么修改字体颜色

教你如何修改状态栏提示的字体颜色教程(来短信提示字颜色)

flutter修改状态栏字体颜色

android 怎么设置状态栏字体颜色

Android实现修改状态栏背景字体和图标颜色的方法