id是builder用的,widgetname才是css用的。
gtk_style_context_add_provider:引入的css文件,仅仅作用于这个widget而已
gtk_style_context_add_provider_for_screen:作用于整个页面
<object class="GtkLabel" id="l2"> //id作用于大的控件
<property name="name">iamlabel</property> //widgetname只是一个属性而已
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label2</property>
<style>
<class name="label2style"/>
</style>
</object>
#include <gtk/gtk.h>
int main (int argc,char *argv[])
{
GtkBuilder *builder;
GtkCssProvider *provider;
GtkStyleContext *context;
GtkWidget *main_window;
GtkWidget *main_box;
GtkWidget *label1;
gtk_init(&argc, &argv);
builder=gtk_builder_new();
gtk_builder_add_from_file(builder,"main_window.glade",NULL);
provider = gtk_css_provider_new ();
gtk_css_provider_load_from_path (provider,"main_window.css",NULL);
main_window=GTK_WIDGET(gtk_builder_get_object(builder,"wd1"));
main_box=GTK_WIDGET(gtk_builder_get_object(builder,"gb1"));
label1=GTK_WIDGET(gtk_builder_get_object(builder,"l1"));
gtk_widget_set_name(label1,"sbba");
puts(gtk_widget_get_name(label1));
/*
context = gtk_widget_get_style_context (main_window);
gtk_style_context_add_provider (context,
GTK_STYLE_PROVIDER(provider),
GTK_STYLE_PROVIDER_PRIORITY_USER);
*/
gtk_style_context_add_provider_for_screen ( gdk_display_get_default_screen ( gdk_display_get_default () ),
GTK_STYLE_PROVIDER ( provider ), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION );
gtk_widget_show_all(main_window);
gtk_main();
return 0;
}
/*
1 .类 ok
2 控件类型 ok
.label1style{
background-color: red;
}
.label2style{
background-color: green;
}
.label3style{
background-color: blue;
}
label {
background-color: #a939f0;
}
label#l1{
background-color: red;
}
label#l2{
background-color: green;
}
label#l3{
background-color: blue;
}
#l1 {
background-color: #f0a810;
}
#l2 {
background-color: #f0a810;
}
#l3 {
background-color: #f0a810;
}
*/
#sbba {
background-color: green;
}
#iamlabel {
background-color: red;
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkWindow" id="wd1">
<property name="can-focus">False</property>
<property name="title" translatable="yes">Hello CSS</property>
<child>
<object class="GtkBox" id="gb1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="l1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label1</property>
<style>
<class name="label1style"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l2">
<property name="name">iamlabel</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label2</property>
<style>
<class name="label2style"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="l3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label3</property>
<style>
<class name="label3style"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
all : app_main.c
gcc -g app_main.c -o app $(shell pkg-config --cflags --libs gtk+-3.0)
#运行: ./app
#调试样式: GTK_DEBUG=interactive ./app
#调试函数: gdb -q app r ctrl+c b main 先关窗口后退出gdb!!!!!!!!!
clean :
rm app