2014-10-22 95 views
0

如何更改状态栏的fontcolor?Gtk + 3.0更改状态栏的fontcolor

我不知道。我发现但是不知道如何使用它!

编辑:

我尝试这样做,但犯规的工作:

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); 
+0

您到目前为止尝试了什么?您是否尝试阅读[手动](https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-override-color)? – drahnr 2014-10-22 20:24:58

回答

1

您可以使用gtk_widget_override_colorGTK_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; 
} 
+0

在文本框中工作,但不在状态栏 – 2014-10-27 15:04:05

+0

屏幕截图没有显示您想要实现的功能吗? – elya5 2014-10-29 20:16:26

+0

是的!但在C(而不是Vala)我试试这个:看编辑 – 2014-10-30 07:53:29

0

我认为你需要检索状态栏的“标签”小部件来改变它的属性。此代码更改状态栏(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);