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

