1

Python-gtk のアプリケーションで負荷の高い作業を行っているときに、スプラッシュスクリーンを表示する際に問題が発生しています。Google で検索して、このリンクを見つけました: http://code.activestate.com/recipes/577919-splash-screen-gtk/。この例は非常に明確なので、プログラムをダウンロードして自分のコンピューターで実行しました。ただし、スプラッシュスクリーンにはその内容が表示されませんでした。Gtk の設定パラメータの設定が間違っているのではないでしょうか? コードを追加する方法:

while gtk.events_pending():
    gtk.main_iteration()

私の場合、スプラッシュスクリーンを表示した直後は機能しませんか?

ご協力いただきありがとうございます

4

3 に答える 3

2

追加してみました:

        while gtk.events_pending():
            gtk.main_iteration()

の直後self.window.show_all()splashScreenそしてそれはうまくいきました。その前は、「これはそれほど長くはかからないはずです...:)」というテキストは表示されませんでした。

これが機能するのは、スプラッシュ画面が偶然に任せられるのではなく、すぐにレンダリングされるようにするためです。これは、一部の人(このコードを書いた人とここに返信した人)ではランダムに機能する必要があり、他の人(あなたはと私)。

于 2012-04-27T14:22:29.780 に答える
0

私はあなたが与えたリンクのコードをテストしました、そしてそれはスプラッシュスクリーンのコンポーネントを表示します。しかし、おそらくスプラッシュスクリーンウィンドウにサイズが指定されていないために、それらが表示されないように見えた可能性がありますか?追加した:

self.window.set_size_request(300,300)

サンプルコードに追加し、ラベルが十分に表示されることを確認します。

于 2012-04-27T14:23:06.343 に答える
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()
于 2015-01-22T08:47:50.863 に答える