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
相关产品推荐
相关产品推荐

