You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Python开发GTK4+Adwaita应用:gtk_window_set_titlebar不兼容问题

问题解决:Adw.ApplicationWindow调用set_titlebar报错

问题原因

不是PyGObject对Adwaita支持不完善,Adw.ApplicationWindow本身已经内置并自动管理HeaderBar,调用gtk_window_set_titlebar()违反了Adwaita窗口的设计规范,因此触发错误。

解决方案

方案1:使用默认HeaderBar(推荐)

移除self.set_titlebar(header)代码,直接设置窗口标题,或通过默认HeaderBar添加自定义部件:

class AppWindow(Adw.ApplicationWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.set_default_size(500, 400)
        self.set_resizable(False)
        # 设置窗口标题
        self.set_title("我的Adwaita应用")

        # 获取默认的HeaderBar实例
        header = self.get_titlebar()
        
        # 向HeaderBar右侧添加按钮
        settings_btn = Gtk.Button(label="设置")
        header.pack_end(settings_btn)
        
        # 向HeaderBar左侧添加按钮
        back_btn = Gtk.Button(label="返回")
        header.pack_start(back_btn)

方案2:替换窗口基类(仅特殊需求使用)

如果必须完全自定义HeaderBar,可以改用Adw.Window作为窗口基类,这样就能正常调用set_titlebar():

class AppWindow(Adw.Window):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.set_default_size(500, 400)
        self.set_resizable(False)

        header = Adw.HeaderBar()
        self.set_titlebar(header)
        # 继续自定义HeaderBar内容

内容的提问来源于stack exchange,提问作者stysan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:05:10