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

Python Gtk3如何实现窗口显示完成后再执行后续方法

问题根源

GTK采用单线程主事件循环模型,所有UI绘制、事件响应都在Gtk.main()循环中调度执行。show事件触发时,窗口的绘制任务刚被加入事件队列,尚未被主循环实际执行渲染。如果在show回调中直接运行阻塞式耗时操作(比如示例中的sleep()、实际场景的安装逻辑),UI线程会被完全占用,主循环无法处理绘制任务,直到耗时操作结束后才会继续执行UI更新——此时已经到了切换下一个窗口的节点,自然会出现安装全程屏幕空白的现象。

实现方法

不要在show回调中同步执行耗时逻辑,使用GLib.idle_add()将安装任务注册为主循环空闲回调:等主循环完成窗口所有渲染、显示工作,进入空闲状态后再触发安装流程,此时提示窗口已经完整显示在屏幕上。
如果安装逻辑属于长耗时IO/CPU密集操作,需要将任务放到独立子线程中执行,避免阻塞主循环导致窗口无响应;安装完成后再通过GLib.idle_add()回到UI线程执行窗口切换操作,保证线程安全。

修正后的可运行示例

#! /usr/bin/env python3
import time
import threading
from gi import require_version
require_version('Gtk', '3.0')
from gi.repository import Gtk, GLib


class InstallTipWindow(Gtk.ApplicationWindow):
    def __init__(self):
        super().__init__(title='安装进度')
        self.set_position(Gtk.WindowPosition.CENTER)
        self.set_default_size(320, 100)
        grid = Gtk.Grid()
        self.add(grid)
        self.tip_label = Gtk.Label()
        self.tip_label.set_text('正在安装,请稍候...')
        grid.attach(self.tip_label, 0, 0, 1, 1)
        # 注册空闲回调,等窗口渲染完成后启动安装
        self.connect('show', lambda _: GLib.idle_add(self.run_install))

    def run_install(self):
        """窗口完全显示后执行安装逻辑"""
        def install_worker():
            print('安装流程启动')
            time.sleep(3) # 替换为实际安装逻辑
            print('安装流程结束')
            # 切回UI线程执行后续窗口操作
            GLib.idle_add(self.on_install_complete)

        # 子线程跑耗时任务,不卡UI
        threading.Thread(target=install_worker, daemon=True).start()
        # 返回False保证idle回调仅执行一次
        return False

    def on_install_complete(self):
        """安装完成后的窗口切换逻辑"""
        # 替换为隐藏当前窗口、展示下一个窗口的业务逻辑
        self.tip_label.set_text('安装完成')
        return False


def main() -> None:
    win = InstallTipWindow()
    win.connect('destroy', Gtk.main_quit)
    win.show_all()
    Gtk.main()


if __name__ == '__main__':
    main()
执行效果

代码会严格按照预期顺序运行:

  • 首先完整渲染并展示安装提示窗口
  • 窗口显示后自动启动安装流程,期间窗口保持响应
  • 安装完成后自动执行窗口切换,不会出现空白屏问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:30:51