Gtk + 3.0更改状态栏的字体颜色

时间:2014-10-22 09:45:51

标签: colors gtk statusbar

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

我不知道。

我发现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);

1 个答案:

答案 0 :(得分: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;
        }
}

screenshot of example application

这是一个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;
}