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

PyGTK技术问询:如何在首张图片显示3秒后展示第二张图片?

解决PyGTK+启动页显示问题

嘿,你的问题出在time.sleep(3)上——这个函数会阻塞GTK的主事件循环,导致第一张图片根本来不及渲染显示,程序就卡在sleep里了。等3秒结束后直接切换到第二张图,所以你看不到启动页的效果。

要实现预期的“先显示封面页几秒,同时完成GUI初始化”,得用GTK自带的超时机制,它不会阻塞主循环,能让GUI正常刷新。下面是修改后的代码:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GLib

class FirstScrn(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        # 初始化并显示第一张封面图
        self.image = Gtk.Image.new_from_file("../images/first.png")
        self.add(self.image)
        self.show_all()
        
        # 设置3秒后执行切换图片的函数
        # GLib.timeout_add的第一个参数是毫秒,3000就是3秒
        GLib.timeout_add(3000, self.switch_to_second_image)

    def switch_to_second_image(self):
        # 移除第一张图,添加第二张图
        self.remove(self.image)
        self.image = Gtk.Image.new_from_file("../images/second.png")
        self.add(self.image)
        self.show_all()
        # 返回False表示这个超时回调只执行一次
        return False

first = FirstScrn()
first.connect("delete-event", Gtk.main_quit)
Gtk.main()

为什么这样可行?

  • GLib.timeout_add()会把回调函数加入GTK的主事件队列,在指定时间后执行,期间主循环依然能处理GUI渲染、用户输入等事件,所以第一张图片能正常显示。
  • 如果你需要在这3秒内同时做GUI初始化的工作,直接把初始化代码放在__init__里show_all()之后就行,不会被阻塞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:15:13