Я написал приложение с Python, Glade и Gtk. Мне нравится использовать анимированный GIF внутри этого приложения. Поэтому я изменил свой код, который работал для отображения PNG. Но, к сожалению, анимация внутри GIF не отображается, просто изображение c.
from gi.repository.GdkPixbuf import PixbufAnimation
class Mealscanner:
def __init__(self):
self.builder = Gtk.Builder()
self.app_path = os.path.dirname(os.path.abspath(__file__))
self.builder.add_from_file(os.path.join(self.app_path, "template.glade"))
def upd_signal(self):
signallight = self.builder.get_object("signal") # changing signal light
if (self.scanner.get_status() == self.scanner.STATUS_CREW_OK or self.scanner.get_status() == self.scanner.STATUS_MEAL_OK):
if (self.scanner.get_status() == self.scanner.STATUS_CREW_OK):
pic = Pixbuf.new_from_file(os.path.join(self.app_path, "assets", "scan_next.png"))
if (self.scanner.get_status() == self.scanner.STATUS_MEAL_OK):
pic = Pixbuf.new_from_file(os.path.join(self.app_path, "assets", "green.png"))
self.log.get_buffer().set_text(self.scanner.display_last_orders())
signallight.set_from_pixbuf(pic)
elif (self.scanner.get_status() == self.scanner.STATUS_ERROR or self.scanner.get_status() == self.scanner.STATUS_MEAL_ERROR):
pic = Pixbuf.new_from_file(os.path.join(self.app_path, "assets", "red.png"))
signallight.set_from_pixbuf(pic)
elif (self.scanner.get_status() == self.scanner.STATUS_IDLE):
signallight = self.builder.get_object("signal") # changing signal light
if (self.scanner.get_status() == self.scanner.STATUS_IDLE):
inforight.set_text(".-._.-._ Bereit für CREW-Scan _.-._.-.")
pixbufanim = PixbufAnimation.new_from_file(os.path.join(self.app_path, "assets", "greycode.gif"))
pixbufanim.get_iter()
signallight.set_from_animation(pixbufanim)
retrun True
# some more methods
def run(self):
try:
self.start_timer()
GLib.timeout_add(10, self.upd_signal)
Gtk.main()
except KeyboardInterrupt:
pass
def quit(self):
self.scanner.db.close()
Gtk.main_quit()
if __name__ == '__main__':
app = Mealscanner()
app.run()
, где template.glade определяет объект как GtkImage:
<object class="GtkImage" id="signal">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="pixbuf">assets/trans.png</property>
<style>
<class name="signal"/>
</style>
</object>
Любые подсказки на this?
РЕШЕНИЕ:
Время ожидания было коротким, поэтому анимированный GIF перезагружался каждые 10 мсек - анимация была медленнее. После увеличения тайм-аута была показана анимация.