本文主要介绍如何使用 CSS 对 GTK4 进行样式设计
GTK 各种CSS属性, 参考网站 w3cub 和官方GTK3例子
main.c
1 |
|
界面文件 builder.ui
1 |
|
builder.css
1 | button { |
编译
1 | $ ls |
GTK 的 CSS 有几种基本选择器,如下:
标签选择器 类似于 HTML 里面的通过标签进行筛选,包含 GTK 内建的各种小部件, 比如 window, button, label. 标签值是通过 gtk_widget_class_set_css_name 进行设置的, 这个一般在构造函数中就设置好了。如果不是自定义的 widget 的话, GTK4 自带的控件就已经写好了,不需要更改:
1
gtk_widget_class_set_css_name (widget_class, "button");
使用标签筛选器
1
2
3button {
border: 1px solid black;
}类选择器 要让选择器能够匹配到某一类 Object, 需要在 Object 中添加类属性, 可以直接通过源代码添加:
1
2GtkStyleContext *context = gtk_widget_get_style_context(widget);
gtk_style_context_add_class(context,"myClass");也可以在 ui 文件中直接添加:
1
2
3
4
5
6
7
8<object id="button2" class="GtkButton">
<property name="label">Button 2</property>
<style>
<class name="myClass"/>
<class name="myClass2"/>
<class name="myClass3"/>
</style>
</object>另外, 注意到
gtk_style_context_add_class
是 add 也就是说和 HTML 类似的, 即一个元素可以同时添加多个类来描述当然如果使用的是
property
, 同时加入多个 property class 并不能添加多个 class, 但是 property 和 style 组合使用也是可以叠加的, 所以可以先使用property
作为主调, 然后 style 则是附加的修饰.1
2
3
4<object id="button2" class="GtkButton">
<property name="label">Button 2</property>
<property name="css-classes">myClass</property>
</object>1
2
3
4
5
6
7
8<object id="button2" class="GtkButton">
<property name="label">Button 2</property>
<property name="css-classes">myClass</property>
<style>
<class name="myClass2"/>
<class name="myClass3"/>
</style>
</object>类选择器使用
.
开头, 比如1
2
3.myClass {
color: red;
}id 选择器
所谓的 id 就是 Object 的 name 属性, 可通过下面函数来设置 widget 的 name 属性
1
gtk_widget_set_name
或者在 ui 文件中直接添加
1
2
3
4<object id="button2" class="GtkButton">
<property name="label">Button 2</property>
<property name="name">myButton</property>
</object>css 中的 id 定义好后也是可以同时给多个 Object 使用的, 只要 Object 添加对应的 name 属性即可.
类选择器使用
.
开头, 比如1
2
3
4
5
6#myButton {
background: #669999;
text-shadow: 1px 1px 5px black;
box-shadow: 0px 0px 5px black;
margin: 20px;
}
使用 gtk-builder-tools 预览 ui 文件
1 | --css 可选 |
screenshot 真的很好用, 这样就可以一边写一边预览, 通过 VSCode 快捷键,
写的同时可以同步预览, 唯一比较遗憾的是截图的方式不能体验交互,比如 css 的
hover
需要实际运行程序才能知道.
Tips
一个快速生成拟物风格的网页