启动画面不显示内容

时间:2012-04-27 09:26:11

标签: pygtk splash-screen

我在使用Python-gtk的应用程序中进行繁重的工作时遇到了一些问题。我一直在Google上搜索并找到了这个链接:http://code.activestate.com/recipes/577919-splash-screen-gtk/。由于示例非常清楚,我下载了程序并在我的计算机上运行它。但是,启动画面没有显示其内容。 可能是Gtk的某些配置参数设置错误了吗?为什么要添加代码:

while gtk.events_pending():
    gtk.main_iteration()
显示启动画面后,

在我的情况下不起作用?

感谢您的帮助

3 个答案:

答案 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()