2013-01-19 13 views
6

Czy ktoś może wypisać prosty przykład stylizowania widżetu GTK + za pomocą css? Nie mogłem dowiedzieć się, jak to zrobić, patrząc na docs:Jak stylizować GTK + za pomocą niestandardowego CSS?

#include <gtk/gtk.h> 
int main(int argc,char *argv[]) 
{ 
    gtk_init(&argc,&argv); 
    GtkWidget *window; 
    GtkWidget *button; 
    GtkCssProvider *cssProvider; 

    gtk_css_provider_load_from_path(cssProvider,"./gtkExample2.css",NULL); 

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    button = gtk_button_new_with_label("GTK Button"); 

    gtk_style_context_add_provider(gtk_widget_get_style_context(window),cssProvider,GTK_STYLE_PROVIDER_PRIORITY_USER); 

    g_signal_connect_swapped(window,"delete-event",G_CALLBACK(gtk_widget_destroy),window); 

    gtk_container_set_border_width(GTK_CONTAINER(window),20); 
    gtk_container_add(GTK_CONTAINER(window),button); 

    gtk_widget_show(window); 
    gtk_widget_show(button); 

    gtk_main(); 
    return 1; 
} 
+0

Próbowałem, dodam to, co mam obecnie. – user1502482

+0

Jakie problemy masz z tym kodem? –

+0

Kompilacja mądra, argument 2 przekazany do gtk_style_context_add_provider jest niepoprawny. Wymaga GtkStyleProvider i dostarczyłem GtkCssProvider i nie mam pojęcia, jak uzyskać GtkStyleProvider – user1502482

Odpowiedz

1

Nie wiem jednej rzeczy o CSS stylizacji w GTK3 (oprócz tego, że często łamie jak deweloperzy wolą naprawić rzeczy - do przestrzegania Standardy CSS - niż utrzymywać kompatybilność poprzez wersje).

Mogę jednak powiedzieć, że to jest złe:

g_signal_connect_swapped(window,"delete-event",G_CALLBACK(gtk_widget_destroy),window); 

Co naprawdę chcesz go zatrzymać GTK gdy główne okno jest zamknięte. Odbywa się to tak:.

g_signal_connect(window,"destroy", G_CALLBACK(gtk_main_quit), NULL); 

Kolejna uwaga jest taka, że ​​dzwonisz

gtk_widget_show(window); 
gtk_widget_show(button); 

Kiedy drzewo widgety została zakończona (tj przestałeś dodawania widgetów do pojemników i kontenerów w toplevel okno), to można uprościć do:

gtk_widget_show_all(window); 

należy również pamiętać, że program, który pracował powinna zwrócić 0 w przypadku powodzenia i użyć wartości niezerowe tor błędów raportu.

+2

To nie odpowiada na pytanie – user877329