簡體   English   中英

什么是必須與 gtk_builder_new_from_resource 一起使用的資源路徑?

[英]What is a resource path that have to be used with gtk_builder_new_from_resource?

我了解函數gtk_builder_new_from_filegtk_builder_new_from_string的參數是什么,但我有點想知道什么是資源路徑,例如:

GtkBuilder *
gtk_builder_new_from_resource (const gchar *resource_path);

我找不到任何示例(C、python、vala 或其他我不介意的)。

編輯:解決方案

感謝 gnianmt 的幫助,這里是 ruby​​ 中的一個基本示例( https://github.com/ruby-gnome2/ruby-gnome2 ):

首先是一個簡單的 ui 文件simple_window.ui

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
  <requires lib="gtk+" version="3.12"/>
  <object class="GtkWindow" id="window">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkLabel" id="label">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="label" translatable="yes">label</property>
        <property name="ellipsize">end</property>
      </object>
    </child>
  </object>
</interface>

然后創建一個simple_window.gresource.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/simple_window">
    <file>simple_window.ui</file>
  </gresource>
</gresources>

將其打包為:

glib-compile-resources simple_window.gresource.xml

其中創建一個 simple_window.gresource 二進制文件。

現在紅寶石腳本:

#!/usr/bin/env ruby

require "gtk3"

path = File.expand_path(File.dirname(__FILE__))
resource = Gio::Resource.load("#{path}/simple_window.gresource")
Gio::Resources.register(resource)
builder = Gtk::Builder.new(:resource => "/simple_window/simple_window.ui")
window = builder.get_object("window")
window.show_all
Gtk.main

該標簽實際上應該是 pygobject 而不是 pygtk,因為后者不包括 GTK+3,無論如何,如果您想要一個使用 Python 中的 Glib.Resource 的示例,您可以查看gtk-demo ,我已經使用該資源保存 CSS 數據。

您可以通過使用 XML 表示描述資源中包含的每個單獨文件的位置來准備資源: https : //gitlab.gnome.org/GNOME/pygobject/-/blob/master/examples/demo/demos/data/demo .gresource.xml

<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/css_accordion">
    <file>css_accordion.css</file>
    <file>reset.css</file>
  </gresource>
  <gresource prefix="/css_basics">
    <file>css_basics.css</file>
    <file>reset.css</file>
  </gresource>
  <gresource prefix="/css_multiplebgs">
    <file>css_multiplebgs.css</file>
    <file>brick.png</file>
    <file>brick2.png</file>
    <file>cssview.css</file>
    <file>reset.css</file>
  </gresource>
</gresources>

然后使用 glib-compile-resources https://developer.gnome.org/gio/stable/glib-compile-resources.html編譯資源

該資源可以在應用程序范圍內加載: https : //gitlab.gnome.org/GNOME/pygobject/-/blob/master/examples/demo/demo.py#L117

base_path = os.path.abspath(os.path.dirname(__file__))
resource_path = os.path.join(base_path, 'demos/data/demo.gresource')
resource = Gio.Resource.load(resource_path)

然后你可以在需要時加載每個單獨的資源: https : //gitlab.gnome.org/GNOME/pygobject/-/blob/master/examples/demo/demos/Css/css_accordion.py#L48

bytes = Gio.resources_lookup_data("/css_accordion/css_accordion.css", 0)

我希望這有助於理解如何使用資源,您可以像放置 CSS 文件一樣放置 Builder 資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM