如何在来自 GtkBuilder 的 XML *.ui 文件中使用 GTK+3 GtkImage

How to use GTK+3 GtkImage in XML *.ui files from GtkBuilder

我正在寻找有关如何包含 GtkImage in an XML UI file, instead of creating them directly from code (In the documentation 的更多信息,它仅显示了从 C 代码创建 GtkImage 的示例,我想从 *.UI 资源中创建) .

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

好的,这是我目前的研究。

这取决于您是要从现有图标集添加 图标 还是添加您自己的自定义 resource/image到您的应用程序。对于 GTK+3,我们使用相同的 class。对于 GTK+4,有人讨论过为图标和图像设置单独的 classes。以下是 GTK+ 3 的说明。

注意:在这个例子中,我在 中添加了 GtkImage 和 GtkLabel,因为 GtkWindow 只允许一个小部件。


添加预定义图标

查看 GTK+3 图标列表 Icon Library

这里是取自 Polari's source code 的关于如何创建 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.png 注册到 src/ 中的 org.gnome.MyApplication.src.gresource.xml 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 来控制像这样加载的自定义图像文件的大小。