Странная ошибка анимации после запуска
У меня есть проект 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->parent == GTK_WIDGET (fixed)'не удалось fixed_hab.move(fish1, fishmove, 50)
Это серьезно? Могу ли я это исправить? Это затруднит жизнь для конечного пользователя?
Заранее спасибо!
1 ответ
Скорее всего, ваш tiemout_add срабатывает, пока приложение уничтожено. Ваши варианты:
- Подключите обработчик уничтожения и удалите таймер перед выходом.
- Сверху внутри move_fish, проверьте, уничтожен ли виджет, и верните False, чтобы завершить таймер.
Доступ к виджету, который больше не существует, может молча завершиться сбоем, но при изменении логики вашего приложения он может даже с шумоподавлением.