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

