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_file
或 gtk_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 二进制文件。
现在 ruby 脚本:
#!/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 资源。
我了解函数 gtk_builder_new_from_file
或 gtk_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 二进制文件。
现在 ruby 脚本:
#!/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 资源。