xml - 如何在来自 GtkBuilder 的 XML *.ui 文件中使用 GTK+3 GtkImage
问题描述
我正在寻找有关如何在 XML UI 文件中包含GtkImage的更多信息,而不是直接从代码创建它们(在文档中,它仅显示了从 C 代码创建 GtkImage 的示例,我想从 * .UI 资源)。
在 *.UI XML 语法中使用 GtkImage 制作图标或空状态的最佳实践是什么?编辑:尤其是在 Flatpak 的背景下。
解决方案
好的,这是我到目前为止的研究。
这取决于您是要从现有图标集中添加图标还是将您自己的自定义资源/图像添加到您的应用程序。对于 GTK+3,我们使用相同的类。对于 GTK+4,有关于为图标和图像设置单独的类的讨论。下面是 GTK+ 3 的说明。
注意:在这个例子中,我在GtkBox 容器中添加了 GtkImage 和 GtkLabel ,因为 GtkWindow 只允许一个小部件。
添加预定义图标
查看带有 GTK+3图标库的图标列表。
这是从Polari 的源代码中获取的关于如何创建 GTK 图标的示例。
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-name">open-menu-symbolic</property>
<property name="icon-size">1</property>
</object>
您可以使用icon-size
(4 是我们用于 GTK+ 应用程序的默认大小)或pixel-size
(应该是 8、16 或 24 的乘数)来更改比例。无论您选择什么,两者都应该适用于 Hi-DPI。
添加自定义图标或图像(PNG、SVG、JPG 等)
这个过程首先需要两个额外的步骤,然后才能编写 XML 代码。1. 将图像放在应用程序源代码的 src/ 文件夹中。
- 注册
MyImage.png
到org.gnome.MyApplication.src.gresource.xml
src/ 中的 gressource 文件。
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/MyApplication">
<file>window.ui</file>
<file>MyImage.png</file>
</gresource>
</gresources>
3. 现在我们可以添加GtkImage
到我们的 UI XML 文件中。
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="resource">/org/gnome/MyApplication/MyImage.png</property>
<property name="icon_size">1</property>
</object>
可以看出,路径由 gresource prefix
+ 文件名组成。默认情况下,图像将以 1:1 呈现。到目前为止,我自己的实验表明,您无法使用pixel-size
或icon-size
控制像这样加载的自定义图像文件的大小。
推荐阅读
- excel - 使用单元格值中的文件名和路径保存 Excel 工作表的宏
- python-3.x - 将 .npz 模型从 ChainerRL 转换为 Keras 模型,或替代方法?
- typescript - Webpack 和 Typescript - 使用 /node_modules/.bin/tsc 而不是全局
- vue.js - vue-table-2 更改搜索过滤器以在按钮单击而不是击键时触发
- r - 有没有办法在 R 中生成一个至少有一些负特征值的矩阵?
- xml - CSV 到 XML hreflang 站点地图
- google-cloud-platform - Google Cloud - 从网络下载大文件
- asp.net-core - Send view with sorted items and query parameters (Search Bar) in Asp .Net Core 3.1
- sapui5 - SAPUI5:如何显示一个表中有多个记录的实体的导航属性
- azure-sql-database - 如何使用数据工厂将 IoT 中心存储的 blob 复制到 Azure SQL