gtk - Vala Gtk css 提供程序 load_from_path
问题描述
我不知道为什么load_from_path
在sudo 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
我不知道如何解决此问题。
解决方案
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'),
)
- 添加
resources
到executable()
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
文件中。
推荐阅读
- c# - Groupby 转换成另一个组
- firebase - 防止在firestore中通过电子邮件登录创建用户帐户
- postgresql - macOS 中的 Postgres 和 JPA
- spring-mvc - Spring Security 静态资源和 webjars 问题(Spring Boot 2)
- python - 具有多个索引的数据帧乘法
- firebase - Firebase 可调用函数:预检响应无效
- spring-boot - 在为电子邮件服务创建模板时在 thymeleaf 中加载外部 CSS 的问题
- php - PDO 语句,引号存储为?
- php - 在 PHP 中创建垂直表
- apache - Apache2:ErrorLogFormat 没有影响