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.0
和 pkg-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 改变状态栏字体颜色的主要内容,如果未能解决你的问题,请参考以下文章