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

咨询GTK4中Nautilus文件复制时的饼状进度组件相关信息

咨询GTK4中Nautilus文件复制时的饼状进度组件相关信息

嗨,我来帮你解答这个问题~你在Nautilus里看到的那种饼状进度指示器,其实是GTK生态里的标准组件,核心是GtkProgressBar——只不过在GNOME默认的Adwaita主题下,给它加上特定样式类后,就会呈现出这种圆形饼状的样子,和Nautilus里的效果完全一致。

具体怎么在Python GTK4里实现呢?

步骤其实很简单:

  • 首先确保你的环境是GTK4,且系统默认使用Adwaita主题(GNOME桌面一般都自带)
  • 创建GtkProgressBar实例后,给它添加"circular"样式类,就能把普通的长条进度条变成饼状圆形指示器
  • 把这个进度条放到GtkHeaderBar里(比如标题栏右侧),就能实现和Nautilus一样的布局
  • 后续更新进度只需要设置fraction属性就行,范围是0.0(未开始)到1.0(完成)

给你一个可以直接参考的示例代码:

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

class ImportProgressWindow(Gtk.ApplicationWindow):
    def __init__(self, app):
        super().__init__(application=app, title="文件导入数据库")
        
        # 创建标题栏
        header_bar = Gtk.HeaderBar()
        self.set_titlebar(header_bar)
        
        # 创建饼状进度条
        self.progress_bar = Gtk.ProgressBar()
        self.progress_bar.add_css_class("circular")
        # 设置进度条尺寸,适配标题栏大小
        self.progress_bar.set_size_request(32, 32)
        
        # 把进度条放到标题栏右侧
        header_bar.pack_end(self.progress_bar)
        
        # 模拟进度更新(实际开发中,你可以在文件导入的线程里异步更新)
        self.current_progress = 0.0
        self.start_progress_update()
    
    def start_progress_update(self):
        self.current_progress += 0.01
        self.progress_bar.set_fraction(self.current_progress)
        if self.current_progress < 1.0:
            # 每100毫秒更新一次进度
            Gtk.Application.get_default().timeout_add(100, self.start_progress_update)

class MyApp(Gtk.Application):
    def __init__(self):
        super().__init__(application_id="com.example.ImportTool")
    
    def do_activate(self):
        win = ImportProgressWindow(self)
        win.present()

if __name__ == "__main__":
    app = MyApp()
    app.run(None)

另外补充一点:如果你想更贴合GNOME应用的设计风格,也可以使用libadwaita库的AdwProgressBar组件,用法和上面类似,添加"circular"样式类就能得到同样的饼状效果,它和GNOME生态的兼容性会更好。

备注:内容来源于stack exchange,提问作者Sebastian Jäpel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 09:38:06