[英]How do I change the colors of an arbitrary widget in GTK+?
如果我正在編寫一個想要通過使用顏色來傳達某些信息的應用程序,我該如何更改給定窗口小部件的背景和前景色? 如果可能的話,我想知道如何在林間空地中做到這一點,以及以編程方式(對於計算的顏色)。
我想知道如何對復雜的小部件執行此操作,例如,包含包含一些Labels
的VBox
的HBox
。
理想情況下,這還包括一個解決方案解決方案,允許我為小部件的現有顏色着色 ,並識別主題使用的任何圖像的平均顏色,以便我可以編程方式補償任何可能使文本無法讀取或以其他方式發生沖突的顏色選擇 - 但如果我能把按鈕變成紅色,我會很高興的。
示例程序:
#include <gtk/gtk.h>
static void on_destroy(GtkWidget* widget, gpointer data)
{
gtk_main_quit ();
}
int main (int argc, char* argv[])
{
GtkWidget* window;
GtkWidget* button;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT (window), "destroy",
G_CALLBACK (on_destroy), NULL);
button = gtk_button_new_with_label("Hello world!");
GdkColor red = {0, 0xffff, 0x0000, 0x0000};
GdkColor green = {0, 0x0000, 0xffff, 0x0000};
GdkColor blue = {0, 0x0000, 0x0000, 0xffff};
gtk_widget_modify_bg(button, GTK_STATE_NORMAL, &red);
gtk_widget_modify_bg(button, GTK_STATE_PRELIGHT, &green);
gtk_widget_modify_bg(button, GTK_STATE_ACTIVE, &blue);
gtk_container_add(GTK_CONTAINER(window), button);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
我所知道的最好的文檔是這里提供的文檔: http : //ometer.com/gtk-colors.html
您始終可以使用gtk_widget_override_color()和gtk_widget_override_background_color() 。 這兩個函數允許您更改窗口小部件的顏色。 但最好通過gtk_style_context_add_class()
和gtk_style_context_add_region()
在窗口小部件/容器實現中使用CSS類和區域。
要修改窗口小部件的顏色,您可以初始化顏色並使用它來修改窗口小部件的顏色:
GdkColor color;
gdk_color_parse("#00FF7F", &color);
gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &color);
要使用圖像而不是顏色:
GdkPixbuf *image = NULL;
GdkPixmap *background = NULL;
GtkStyle *style = NULL;
image = gdk_pixbuf_new_from_file ("background.jpg", NULL);
gdk_pixbuf_render_pixmap_and_mask (image, &background, NULL, 0);
style = gtk_style_new ();
style->bg_pixmap [0] = background;
gtk_widget_set_style (GTK_WIDGET(widget), GTK_STYLE (style));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.