奇怪的运行后动画错误

时间:2011-09-18 18:49:58

标签: python animation pygtk gobject

我有一个Python 2.7 / PyGTK 2.24项目。我正在Linux Ubuntu 11上构建。

我正在使用以下代码为图像在屏幕上的移动设置动画。

    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:断言   `widget-&gt; parent == GTK_WIDGET(已修复)'失败fixed_hab.move(fish1,   fishmove,50)

这是严重的吗?我可以修理吗?这会给最终用户带来困难吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

很可能你的tiemout_add会在应用程序被销毁时触发。 您的选择是:

  1. 连接销毁处理程序并在退出前删除计时器。
  2. 最里面的move_fish,检查小部件是否被销毁并返回False以结束计时器。
  3. 访问不再存在的窗口小部件可能会无声地失败,但是当您的应用程序逻辑发生更改时,它甚至可能会出现错误的错误。