Я создал пользовательский интерфейс Glade для своего проекта GTK со следующей спецификацией:
<?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 связан с другим пользовательским интерфейсом, который запускается по умолчанию при первом запуске приложения.
Следуя указанному API здесь , я попытался сослаться на метку 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 происходит нечто очень странное. Я делаю что-то неправильно? Любая помощь приветствуется и спасибо заранее.