gpt4 book ai didi

python - PyGObject 模板子项未定义

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:19 25 4
gpt4 key购买 nike

我已经为我的 GTK 项目创建了一个 Glade UI,其规范如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<template class="Pages" parent="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="page_title">
<property name="visible">True</property>
<property name="label" translatable="yes">Title</property>
<attributes>
<attribute name="weight" value="normal"/>
<attribute name="scale" value="1.5"/>
</attributes>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</template>
</interface>

此 Glade UI 链接到应用程序首次启动时默认运行的另一个 UI。

按照提到的API here ,我尝试引用标签 page_title在Python实现中:

from gi.repository import Gtk

@Gtk.Template(resource_path='/com/bscubed/App/ui/pages.ui')
class Pages(Gtk.Box):
__gtype_name__ = 'Pages'

page_title = Gtk.Template.Child()

def __init__(self, **kwargs):
super().__init__(**kwargs)
print(type(self.page_title))
self.page_title.set_text("Test")

但是输出总是

<class 'gi._gtktemplate.Child'>
AttributeError: 'Child' object has no attribute 'set_text'

而且我无法访问标签通常可用的任何方法。

但是,模板定义在主窗口实现中工作得很好:

from gi.repository import Gtk

from .pages import Pages

@Gtk.Template(resource_path='/com/bscubed/App/ui/window.ui')
class MainWindow(Gtk.ApplicationWindow):
__gtype_name__ = 'MainWindow'

toolbar_stack = Gtk.Template.Child()
content_stack = Gtk.Template.Child()
start_button = Gtk.Template.Child()

def __init__(self, **kwargs):
super().__init__(**kwargs)
self.start_button.connect("clicked", self.next_page)
print(type(self.start_button))

def next_page(self, button):
self.content_stack.set_visible_child_name("pages")
self.toolbar_stack.set_visible_child_name("pages_toolbar")

其输出为<class 'gi.overrides.Gtk.Button'>

PyGObject 发生了一些非常奇怪的事情。难道我做错了什么?感谢任何帮助,并提前感谢您。

最佳答案

使用GtkTemplate.Child()而不是Gtk.Template.Child()

编辑:Gtk.Template.Child()仅适用于最新的GTK+ 3版本。您应该将其更新到最新版本,或者您可以在 gi_composites.py 补丁文件中使用 GtkTemplate.Child()

有关更多信息,请阅读 /your_project/src 目录中第 162 行的 gi_composites.py 文档

关于python - PyGObject 模板子项未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58315926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com