如何使用 css 代码单独设置 gtk 小部件的样式

2024-04-09

在这之后GTK+ 将字体更改为旋转按钮 https://stackoverflow.com/questions/47083294/gtk-change-font-to-spin-button和这个为什么 CSS 样式没有应用于 GTK+ 代码? https://stackoverflow.com/questions/47114306/how-to-apply-css-to-gtk-code问题,我开始了解如何将CSS样式应用于GTK代码,但仍然有很多令人困惑的细节。

这是我创建两个按钮和三个标签的代码:

test.c

#include <gtk/gtk.h>
#include <string.h>  

static void
activate (GtkApplication *app,
          gpointer        user_data)
{

  GtkWidget *window = gtk_application_window_new (app);;
  GtkWidget *button_01 = gtk_button_new_with_label("This is button 01");
  GtkWidget *button_02 = gtk_button_new_with_label("This is button 02");
  GtkWidget *label0 = gtk_label_new("hello 0");
  GtkWidget *label1 = gtk_label_new("hello 1");
  GtkWidget *label2 = gtk_label_new("hello 2");
  GtkWidget * main_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 25);

  GtkCssProvider *cssProvider = gtk_css_provider_new();
  gtk_css_provider_load_from_path(cssProvider, "theme.css", NULL);
  gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),
                               GTK_STYLE_PROVIDER(cssProvider),
                               GTK_STYLE_PROVIDER_PRIORITY_USER);

  gtk_box_set_homogeneous (GTK_BOX (main_box), TRUE);
  gtk_container_add (GTK_CONTAINER (window), main_box);
  gtk_container_add (GTK_CONTAINER (main_box), button_01);
  gtk_container_add (GTK_CONTAINER (main_box), label0);
  gtk_container_add (GTK_CONTAINER (main_box), label1);
  gtk_container_add (GTK_CONTAINER (main_box), label2);
  gtk_container_add (GTK_CONTAINER (main_box), button_02);

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

int
main (int    argc,
      char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}

这是 CSS 文件:

主题.css

GtkWindow {
    font: Comic Sans 12
}

.button {
  color: green;
}

该代码工作正常,因为所有字体都已更改并且所有按钮均为红色。我想做的是单独设置每个小部件的样式,例如,要使 label0 显示为红色,label1 显示为绿色,label 2 显示为蓝色。

根据这些例子GTK+ CSS 概述:GTK+ 3 参考手册 https://developer-old.gnome.org/gtk3/stable/chap-css-overview.html,这应该可以解决问题:

label#label0 {
  color: red;
}
label#label1 {
  color: green;
}
label#label2 {
  color: blue;
}

但显然事实并非如此,这意味着我错过了那里的一些东西。

任何有关的帮助如何使用 css 代码单独设置小部件的样式将不胜感激。


CSS 文件不知道您为程序中的变量指定的名称。您必须使用以下方式命名小部件gtk_widget_set_name() https://docs.gtk.org/gtk3/method.Widget.set_name.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 css 代码单独设置 gtk 小部件的样式 的相关文章

随机推荐

  • Spring 注入 - 访问构造函数中注入的对象

    我有一个资源 Spring bean 它的一些字段是由 Spring 注入的 例如 Repository value appDao public class AppDaoImpl implements AppDao PersistenceC
  • 有没有办法将 __len__ 或 __eq__ 等方法实现为类方法?

    它很容易实现 len self Python 中的方法 以便它处理len inst 像这样的调用 class A object def len self return 7 a A len a gives us 7 您可以定义很多类似的方法
  • 在时尚中排除网站的子文件夹?

    有没有办法使用 Stylish 排除网站的子文件夹 moz document domain www website com 将会影响 website com 的所有页面 问题是 这个网站还托管一个维基 www website com wik
  • 如何在我的网站上显示我的 Instagram feed?

    我有一个网站 可以显示我的 Instagram 动态 以前我用过 Instagram 遵循 API 用户 自我 媒体 最近 这个 API 使用的是我生成的一次访问令牌 并将其作为变量保存在我的代码中 并且很长一段时间 2 3 年 都没有更改
  • 在 Javascript 中将小数金额转换为文本字符串分数?

    我有一个以数字形式返回的值 可以是十进制数 例如 1 15 但是 我需要格式化所有数字在一个范围内到给定的分数 例如 所有大于 0 但小于 0 2 的数字我想返回 1 8 我已经开始将其作为一系列 if else 语句来执行此操作 但我想知
  • DTO 接口

    我目前正在开始开发一个大型 Web 应用程序 主要包含 Angular SPA 和可以访问后端层的 OData WebAPI 我们正处于早期阶段 并已开始实施第一批课程 包括Model dll它位于公共名称空间中 以便所有层都可以访问它 我
  • Prometheus:如何根据 Consul 标签删除目标

    我的 Prometheus 服务器从 Consul 获取其目标列表 或 服务 用 Consul 的行话来说 我只想监视这些目标的子集 这应该可以通过普罗米修斯的正则表达式机制实现 但我无法正确配置 这是怎么做到的 我已经搜索过网络 但没有一
  • 如果原始值与任何when_表达式都不匹配,则返回原始值

    我的 SQL 导出字段上有一行 并且我试图删除字段中返回的空白值 如果它与姓氏中的 AMA 完全匹配 但是 当我使用当前代码导出文件时 姓氏不带 AMA 的名称将被完全删除 Max Orders ShipFirstName CASE Ord
  • 如何在不编写 20 个 if 语句或创建 20 个列表/字典的情况下进行以下比较?

    这个问题与生物学有关 所以对于那些知道氨基酸和密码子是什么的人来说 那就太棒了 对于那些不明白的人 我已尽力表述 以便您能够理解我在说什么 所以我有一个密码子列表 也可以称为3字母字符串 由以下四个字母的组合组成 A G C T 即AAT
  • 如何使用 jQuery 设置输入框的默认值?

    我想更改输入框的默认值 以便在重置表单时保留该值 我有以下代码 它使用 jQuery 设置一个值 但当按下重置时 该值将变为初始值
  • typescript 对 setState 与用户输入进行反应

    在这个打字稿反应 create react app 的基本示例中 我试图通过用户输入更改state name 有人可以向我展示一个工作示例 我没有找到 或更好的示例 文档在哪里 linter 的 第二个 错误是 54 24 错误 TS232
  • 为什么这个 Snowflake 查询不需要 LATERAL 关键字就可以工作?

    我在雪花中有这样的观点 create or replace view foo as select 1 as id foo 2 as sales from values 1 100 2 200 3 300 和这个用户定义的表函数 https
  • 使用混合模式重新创建 HSV 颜色

    我正在开发一个应用程序 该应用程序创建的图像的色调 饱和度和值根据不同的参数而变化 出于性能原因 单独渲染色调 饱和度和明度组件 然后使用 Photoshop 风格的混合模式 正片叠底 叠加 滤色 色调等 将它们合成在一起是有意义的 我已经
  • 如何使用squire模拟内联requirejs依赖项以进行单元测试?

    我将 requirejs 与内联需求一起使用 例如 define someDep function someDep return someFn function require anotherDep function anotherDep
  • 如何在 Angular 中设置默认页面

    当我请求包含以下 URL 的链接时 出现错误 http xxx 46630 或与此http crmbyzaid azurewebsites net 但当我添加时效果很好 index html 与网址 现在 当我请求时 我想设置部分页面 ap
  • 在 moment.js 中本地化日期和月份 [重复]

    这个问题在这里已经有答案了 如何在 moment js 中本地化当前日期和月份 没有年份 我想要的正是输出moment format LL 但没有年份部分 考虑以下示例 moment locale tr format LL 1 Hazira
  • 如何在单引号字符串中使用变量?

    如何回显单引号内的变量 echo test text here is some test text counter output gt gt FILE 变量在双引号字符串中扩展 但在单引号字符串中不扩展 name World echo He
  • 在设备驱动程序中使用 select()/poll()

    我有一个驱动程序 它可以处理多个 TCP 连接 有没有一种方法可以在给定列表的情况下执行类似于内核中用户空间应用程序 api 的 select poll epoll 的操作struct sock s Thanks 您可能想编写自己的自定义s
  • MATLAB 类对象未更新

    我正在编写一个简单的 MATLAB 类 它具有一些属性和一个方法 类的构造函数使用默认值初始化属性 类的方法在类被构造之后获得额外的输入以更新类属性 classdef classTest properties p1 p2 p3 p4 end
  • 如何使用 css 代码单独设置 gtk 小部件的样式

    在这之后GTK 将字体更改为旋转按钮 https stackoverflow com questions 47083294 gtk change font to spin button和这个为什么 CSS 样式没有应用于 GTK 代码 ht