首页 > 解决方案 > 如何在来自 GtkBuilder 的 XML *.ui 文件中使用 GTK+3 GtkImage

问题描述

我正在寻找有关如何在 XML UI 文件中包含GtkImage的更多信息,而不是直接从代码创建它们(在文档中,它仅显示了从 C 代码创建 GtkImage 的示例,我想从 * .UI 资源)。

在 *.UI XML 语法中使用 GtkImage 制作图标或空状态的最佳实践是什么?编辑:尤其是在 Flatpak 的背景下。

标签: xmlgtk3gnomegobjectflatpak

解决方案


好的,这是我到目前为止的研究。

这取决于您是要从现有图标集中添加图标还是将自己的自定义资源/图像添加到您的应用程序。对于 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/ 文件夹中。

  1. 注册MyImage.pngorg.gnome.MyApplication.src.gresource.xmlsrc/ 中的 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-sizeicon-size控制像这样加载的自定义图像文件的大小。

从 XML 加载的自定义图像


推荐阅读