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

标签 xml gtk3 gnome gobject flatpak

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

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

最佳答案

好的,这是我迄今为止的研究。

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

注意:在此示例中,我在 GtkBox container 内添加了 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/文件夹中。

  • 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 前缀 + 文件名组成。 默认情况下,图像将以 1:1 的比例呈现。 到目前为止,我自己的实验表明,您不能使用 pixel-sizeicon-size 来控制像这样加载的自定义图像文件的大小。

    custom image loaded from XML

    关于xml - 如何在 GtkBuilder 的 XML *.ui 文件中使用 GTK+3 GtkImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57648936/

    相关文章:

    java - 解码 JAVA Web 服务中的嵌套或复杂数据元素

    php - 在 PHP 中设置 SOAP header XML 标记属性

    通过 GTK3 CSS 样式表自定义 GtkTextTag 外观?

    Gtk.在 Sprite 中的应用

    c - 如何在GTK+中的一个Box中添加两个Box

    java - 如何将 Java 应用程序捆绑到 Gnome/Ubuntu 中的关联 .desktop 文件?

    linux - 在 CentOS 6.4 KVM 中安装 GNOME

    android - 支持不同的屏幕尺寸 - xml 未正确加载。可能的错误?

    c# - Linq to Xml : Is XDocument a caching reader?

    c++ - 如何在 GtkEntry 中设置文本可编辑