gtk怎么设置样式

 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值