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

PyGObject与GTK环境下Libadwaita主题不生效(顶部栏样式异常)求助

PyGObject与GTK环境下Libadwaita主题不生效(顶部栏样式异常)求助

我太懂你这种困惑了——明明代码里已经引入了Libadwaita,也用了Adw.Application,结果窗口顶栏还是GTK原生的样子,完全没出Libadwaita那种精致的设计感,其他控件倒是正常,这真的很让人挠头!

问题的核心其实很简单:你目前的窗口类继承的是Gtk.ApplicationWindow,而不是Libadwaita专门提供的Adw.ApplicationWindow。后者才会自动应用Libadwaita的窗口装饰和主题样式,前者只会用系统原生的GTK窗口框架,所以顶栏才会不对味。

给你两个关键修改点,改完就能看到预期的Libadwaita顶栏了:

  • 把MainWindow的父类从Gtk.ApplicationWindow替换成Adw.ApplicationWindow
  • 建议搭配Adw.HeaderBar来组织窗口顶部的控件,这是Libadwaita的标准布局方式,能让顶栏的样式更完整

下面是修改后的完整代码:

import sys
import gi

gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')

from gi.repository import Gtk, Adw

class MainWindow(Adw.ApplicationWindow):  # 这里改成Adw.ApplicationWindow
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.set_title('Test')
        self.set_default_size(800, 600)

        # 创建Libadwaita的HeaderBar作为顶栏
        header_bar = Adw.HeaderBar()
        self.set_titlebar(header_bar)

        # 把按钮放到HeaderBar里(也可以继续用垂直Box放其他内容)
        button = Gtk.Button.new_with_label("Test")
        button.connect("clicked", self.on_button_clicked)
        header_bar.pack_end(button)

        # 主内容区域的Box
        box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.set_child(box)

        # 如果需要在主区域加其他控件,继续append到box里即可
        # box.append(...)

    def on_button_clicked(self, button):
        print("Button was clicked")

class MyApp(Adw.Application):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.connect('activate', self.on_activate)

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

app = MyApp(application_id='com.example.GtkApplication')
app.run(sys.argv)

解释下为什么这样改:

  • Adw.ApplicationWindow是Libadwaita为GTK4定制的窗口类,它会自动接管窗口的装饰逻辑,应用Libadwaita的主题样式,包括顶栏的圆角、控件样式等
  • Adw.HeaderBar是Libadwaita的标准顶栏组件,它会自动适配不同系统的窗口行为,同时保持Libadwaita的设计风格,把按钮放到这里比直接放在窗口根Box里更符合规范

运行修改后的代码,你应该就能看到和预期一致的Libadwaita风格顶栏啦!

备注:内容来源于stack exchange,提问作者nimafanniasl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:52:57