首页 > 解决方案 > Vala Gtk css 提供程序 load_from_path

问题描述

我不知道为什么load_from_pathsudo ninja install. 它返回:

warning: unhandled error `GLib.Error'
            css_provider.load_from_path ("com.github.saidbakr.quick-shutdown.css");

我试图捕捉异常,但同样的警告:

Gtk.CssProvider css_provider = new Gtk.CssProvider ();
        try {
            css_provider.load_from_path ("com.github.saidbakr.quick-shutdown.css");
        }
        catch (IOError e){
            GLib.error("", e.message);
        }

我检查了 meson.build:

...
install_data(
    join_paths('data', meson.project_name()+ '.css'),
    install_dir: join_paths(get_option('datadir'))
)

添加文件的路径并安装到/usr/local/share 我不知道如何解决此问题。

标签: gtkglibvala

解决方案


Gtk.CssProvider.load_from_path() 的文档没有提到搜索/usr/local/share/<app-data-dir>或任何其他标准目录。它期待一条绝对路径。

解决这个问题的标准方法是使用 GResource。如果您使用的是教程或模板,它可能在 GResource 上有一些您可以使用的东西。


如果不:

  • 创建一个文件,quick-shutdown.gresource.xml,其中包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/com/github/saidbakr/quick-shutdown">
    <file>com.github.saidbakr.quick-shutdown.css</file>
  </gresource>
</gresources>
  • 将此添加到您的 meson.build 中:
gnome = import('gnome')
resources = gnome.compile_resources('com.github.saidbakr.quick-shutdown',
  files('quick-shutdown.gresource.xml'),
)
  • 添加resourcesexecutable()meson.build 调用中的源列表
  • 改用Gtk.CssProvider.load_from_resource()css_provider.load_from_resource ("/com/github/saidbakr/quick-shutdown/com.github.saidbakr.quick-shutdown.css")
  • 删除安装 CSS 文件的介子代码。它现在直接内置到您的可执行文件中。

有关如何执行此操作的真实示例,请查看GNOME 时钟源代码

这听起来可能有很多步骤,但它与添加 GtkBuilder UI 文件(或者实际上是您在程序中需要的任何其他类型的静态文件)的步骤相同。如果您以后需要这样做,您所要做的就是将<file>条目添加到.gresource.xml文件中。


推荐阅读