2012-04-27 17 views
1

Python-gtkのアプリケーションで重い作業中にスプラッシュ画面が表示されていました。 Googleで検索しましたが、このリンク:http://code.activestate.com/recipes/577919-splash-screen-gtk/が見つかりました。この例はかなり明確なので、私はプログラムをダウンロードし、それを自分のコンピュータ上で走らせました。しかし、スプラッシュスクリーンはその内容を示さなかった。 Gtkのいくつかの設定パラメータが間違っているかもしれませんか?スプラッシュ画面に内容が表示されない

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

右のスプラッシュスクリーンを表示した後、私の場合には動作しません。どのようにコードを追加して来ますか?あなたの助け

答えて

2

ため

おかげで私が追加してみました:

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

直後self.window.show_all()splashScreenで、それが働きました。その前に、「これは長すぎるはずはありません...」というテキストは表示されませんでした。

これは、スプラッシュ画面を直ちにレンダリングするのではなく、偶然に残すのではなく、一部の人(このコードを書いた人とここで返信した人)他の人のために(あなたと私)。

+0

これは私にとってはうまくいきません。実際、(メイン関数の)スプラッシュスクリーンの初期化の直後に、すでに "while gtk.events_pending ..."があります。私はGnomeに取り組んでいますが、xfceデスクトップ上で試してみましたが、それはうまくいきます。 –

+0

私は主な機能(私のコンピュータ上では何もしないように見える)について話しているわけではありません。 'splashScreen'に' self.window.show_all() 'の直後に1つ追加することを話しています。あなたはそれをやりました?そしてそれはまだ動作しませんか?もしそうなら...奇妙な。 – dumbmatter

+0

申し訳ありませんが、私は間違っている必要があります。今それは動作します:-)。ありがとうございました –

0

あなたが与えたリンクのコードをテストしたところ、スプラッシュスクリーンのコンポーネントが表示されていました。しかし、スプラッシュスクリーンのウィンドウにサイズが指定されていない可能性があります。サンプルコードに

self.window.set_size_request(300,300)

をし、確かにラベルが表示されない:私は付け加えました。

+0

ありがとうございました。残念ながら、それは役に立たない。何も書かれていないウィンドウが表示されます。 –

+0

スプラッシュ画面の後に表示される「メインウィンドウ」はどうですか?それはその内容を示していますか? – Wes

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() 
関連する問題