0

Python 2.7 /PyGTK2.24プロジェクトがあります。私はLinuxUbuntu11でビルドしています。

次のコードを使用して、画面上での画像の動きをアニメーション化します。

    def move_fish():
        global fishmove, flipped
        if fishmove < 440 and flipped == False:
            fishmove = fishmove + 10
            fixed_hab.move(fish1, fishmove, 50)
            return True
        elif fishmove == 440 and flipped == False:
            pixbufanim = gtk.gdk.PixbufAnimation("IMG/IMG-FISH-L.gif")
            fish1.set_from_animation(pixbufanim)
            flipped = True
            fishmove = fishmove - 10
            fixed_hab.move(fish1, fishmove, 50)
            return True
        elif fishmove > 0 and flipped == True:
            fishmove = fishmove - 10
            fixed_hab.move(fish1, fishmove, 50)
            return True
        elif fishmove == 0 and flipped == True:
            pixbufanim = gtk.gdk.PixbufAnimation("IMG/IMG-FISH-R.gif")
            fish1.set_from_animation(pixbufanim)
            flipped = False
            return True                

    gobject.timeout_add(100, move_fish)

コードは正常に実行され、コンパイルエラーや実行時のエラーは発生しません。ただし、ウィンドウを閉じた後、次のエラーが複数回発生します。(気をつけてください。fixed_hab(gtk.Fixed)オブジェクトとfish1(gtk.Image)オブジェクトは、関数宣言「def move_fish()」と同じスコープにあります。

Word4Word-9-16.py:1655:GtkWarning:gtk_fixed_move_internal:assertation `widget-> parent == GTK_WIDGET(fixed)'failed_hab.move(fish1、fishmove、50)

これは深刻ですか?修正できますか?これはエンドユーザーにとって物事を困難にするだろうか?

前もって感謝します!

4

1 に答える 1

0

ほとんどの場合、アプリケーションが破棄されている間にtiemout_addが起動します。オプションは次のとおりです。

  1. 破棄ハンドラーを配線し、終了する前にタイマーを削除します。
  2. move_fishの一番上で、ウィジェットが破棄されているかどうかを確認し、Falseを返してタイマーを終了します。

存在しなくなったウィジェットへのアクセスはサイレントに失敗する可能性がありますが、アプリケーションロジックが変更されると、セグメンテーション違反が発生する可能性があります。

于 2011-10-04T21:24:06.273 に答える