我在使用Python-gtk的应用程序中进行繁重的工作时遇到了一些问题。我一直在Google上搜索并找到了这个链接:http://code.activestate.com/recipes/577919-splash-screen-gtk/。由于示例非常清楚,我下载了程序并在我的计算机上运行它。但是,启动画面没有显示其内容。 可能是Gtk的某些配置参数设置错误了吗?为什么要添加代码:
while gtk.events_pending():
gtk.main_iteration()
显示启动画面后,在我的情况下不起作用?
感谢您的帮助
答案 0 :(得分:2)
我尝试添加:
while gtk.events_pending():
gtk.main_iteration()
在self.window.show_all()
splashScreen
之后,这很有效。在此之前,它没有显示文字,"这不应该花费太长时间......:)"。
这是有效的,因为它确保立即渲染启动画面,而不是让它成为偶然的机会,我想这对于某些人(编写此代码的人和在此处回复的其他人)必须随机工作而不是其他人(你和我)。
答案 1 :(得分:0)
我测试了您提供的链接中的代码,它确实显示了启动画面的组件。但它可能似乎没有为您显示它们可能是因为闪屏窗口没有给出大小?我补充说:
self.window.set_size_request(300,300)
示例代码,确定标签确实出现。
答案 2 :(得分:0)
我知道这是一个非常古老的问题,但我对Gtk + 3也有同样的问题,并且使用Gtk.events_pending()没有效果,所以我选择了不同的路线。
基本上,我只需要一个按钮来手动清除启动画面,我已经看到了很多商业应用程序。然后我在创建主窗口后在启动画面上调用window.present()以保持前面的启动画面。这似乎只是暂停Gtk + 3需要实际显示启动画面内容之前显示其背后的主窗口。
class splashScreen():
def __init__(self):
#I happen to be using Glade
self.gladefile = "VideoDatabase.glade"
self.builder = Gtk.Builder()
self.builder.add_from_file(self.gladefile)
self.builder.connect_signals(self)
self.window = self.builder.get_object("splashscreen")
#I give my splashscreen an "OK" button
#This is not an uncommon UI approach
self.button = self.builder.get_object("button")
#Button cannot be clicked at first
self.button.set_sensitive(False)
#Clicking the button will destroy the window
self.button.connect("clicked", self.clear)
self.window.show_all()
#Also tried putting this here to no avail
while Gtk.events_pending():
Gtk.main_iteration()
def clear(self, widget):
self.window.destroy()
class mainWindow():
def __init__(self, splash):
self.splash = splash
#Tons of slow initialization steps
#That take several seconds
#Finally, make the splashscreen OK button clickable
#You could probably call splash.window.destroy() here too
self.splash.button.set_sensitive(True)
if __name__ == "__main__":
splScr = splashScreen()
#Leaving this here, has no noticeable effect
while Gtk.events_pending():
Gtk.main_iteration()
#I pass the splashscreen as an argument to my main window
main = mainWindow(splScr)
#And make the splashscreen present to make sure it is in front
#otherwise it gets hidden
splScr.window.present()
Gtk.main()