代码之家  ›  专栏  ›  技术社区  ›  Glyph

如何在GTK+中更改任意小部件的颜色?

gtk
  •  4
  • Glyph  · 技术社区  · 16 年前

    如果我正在编写一个应用程序,希望通过颜色的使用来传递一些信息,那么如何更改给定小部件的背景色和前景色呢?如果可能的话,我想知道如何在Glade中实现这一点,以及如何通过编程(使用计算颜色)实现这一点。

    我想知道如何对复杂的小部件执行此操作,例如, HBox 包含一个 VBox 里面有一些 Labels .

    理想情况下,这还包括一个解决方案,允许我 色调 该小部件的现有颜色,并确定主题使用的任何图像的平均颜色,以便我可以通过编程方式补偿可能使文本不可读或以其他方式冲突的任何颜色选择-但如果我可以将按钮变红,我会很高兴。

    4 回复  |  直到 16 年前
        1
  •  8
  •   Tometzky    16 年前

    #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;
    }
    
        3
  •  1
  •   ataravati    11 年前

    gtk_widget_override_color () gtk_widget_override_background_color () gtk_style_context_add_class() gtk_style_context_add_region()

        4
  •  1
  •   nishantbhardwaj2002    10 年前

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