2011-09-18 133 views
0

我有一個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)對象在同一範圍內的函數聲明 「高清move_fish():」

Word4Word-9-16.py:1655 :GtkWarning:gtk_fixed_move_internal:斷言 `小窗口>母公司== GTK_WIDGET(固定的)」失敗fixed_hab.move(fish1, fishmove,50)

這是嚴重的我可以修復它這是要去?讓最終用戶難以接受?

在此先感謝!

回答

0

很可能你的tiemout_add在應用程序被銷燬時觸發。 您的選擇是:

  1. 連線銷燬處理程序並在退出前刪除計時器。
  2. 最上面的move_fish,檢查widget是否被銷燬並返回False來結束計時器。

訪問不再存在的小部件可能會自動失敗,但是當您的應用程序邏輯改變時,它甚至可能會發生段錯誤。