GTK与 Python的子控件未被渲染

编程语言 2026-07-09

我对GTK还挺陌生的。我正在尝试构建一个Hello World应用。UI元素在 main.ui 文件中定义,并使用模板来加载该文件。我现在只看到一个窗口,没有按钮。连 title 都没有更新。所以我猜模板没有起作用。有人能帮忙吗?

UI文件(main.ui)

<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 1.0.2 -->
<interface>
  <!-- interface-name ui.ui -->
  <requires lib="gtk" version="4.0"/>
  <object class="GtkApplicationWindow">
    <property name="title">Hello</property>
    <child>
      <object class="GtkButton">
        <property name="label">Click Me</property>
      </object>
    </child>
  </object>
</interface>

Python代码

import gi

gi.require_version("Gtk", "4.0")
from gi.repository import Gtk


@Gtk.Template(filename="ui/main.ui")
class MainWindow(Gtk.ApplicationWindow):
    __gtype_name__ = "MainWindow"

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.init_template()


def on_activate(app):
    win = MainWindow()
    win.set_application(application=app)
    win.present()


app = Gtk.Application()
app.connect("activate", on_activate)
app.run(None)

我看到的效果

在此输入图片描述

预期结果

在此输入图片描述

解决方案

按这种方式更新了 .ui 文件,结果起作用了。从 objecttemplate

<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 1.0.2 -->
<interface>
  <!-- interface-name ui.ui -->
  <requires lib="gtk" version="4.0"/>
  <template class="MainWindow" parent="GtkApplicationWindow">
    <property name="title">Hello</property>
    <child>
      <object class="GtkButton">
        <property name="label">Click Me</property>
      </object>
    </child>
  </template>
</interface>
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章