Python Gtk应用程序中的动画gif
我用Python、Glade和Gtk编写了一个应用程序。 我喜欢在这个应用程序中使用动画GIF。 所以我修改了我的代码,它用于显示PNG。但遗憾的是,GIF中的动画没有显示,只是一幅静态图像Python Gtk应用程序中的动画gif,python,gtk,animated-gif,Python,Gtk,Animated Gif,我用Python、Glade和Gtk编写了一个应用程序。 我喜欢在这个应用程序中使用动画GIF。 所以我修改了我的代码,它用于显示PNG。但遗憾的是,GIF中的动画没有显示,只是一幅静态图像 from gi.repository.GdkPixbuf import PixbufAnimation class Mealscanner: def __init__(self): self.builder = Gtk.Builder() self.app_pat
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>
真的
假的
真的
真的
资产/trans.png
有什么提示吗
解决方案:
超时时间很短,因此动画gif每10毫秒重新加载一次-动画速度较慢。增加超时时间后,将显示动画。请参阅我对问题的编辑。如果Gtk.Builder.get_object()提供了正确的对象,那么signallight就是GtkImage。对我来说是有效的,将显示的代码与
模板一起使用。glade Hello@stovl:我用另一个动画gif进行了双重检查。同样的结果。显示gif,但不显示动画。在使用Gnome 3.34的Debian Bullseye上运行python 3.7-可能有问题吗?哈!诀窍是删除“return True”!知道了!只需将超时时间增加几毫秒,这样动画gif就不会每10毫秒加载一次!在那之后,一切都如愿了!感谢斯托夫的耐心。