python - 是否可以使用 AppIndicator3 添加动画?
问题描述
我正在尝试使用 Python 创建一个简单的 AppIndicator。该代码与以下内容非常相似:
import gi
from gi.repository import Gtk
from gi.repository import AppIndicator3 as appindicator
APPINDICATOR_ID = 'myapp'
def main():
indicator = appindicator.Indicator.new(APPINDICATOR_ID, '/usr/share/myapp/images/icon.svg', appindicator.IndicatorCategory.SYSTEM_SERVICES)
indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
Gtk.main()
它工作得很好,但我想介绍一个动画图标。例如闪烁的图标。不是静态的。
我尝试将 SVG 文件转换为 GIF,但效果不佳。
有没有办法GdkPixbuf.PixbufAnimation
在 AppIndicator3 中创建一个(示例)?
如果是,我该怎么做?
解决方案
我找到了解决方法。特别是,如果您尝试配置 GIF。
对我来说,创建一个手动的 GIF 就可以了。此解决方案需要一种与并发相关的更好方法,但原型在这里:
import gi
import time
import signal
import threading
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, GLib
from gi.repository import AppIndicator3 as appindicator
APPINDICATOR_ID = 'myapp'
finished = False
def change_icon(indicator, index=5):
indicator.set_icon("spinner-%s.svg" % str(index))
def render_icon(indicator):
i = 0
while True:
# I have 10 SVG images
index = (i % 10)
GLib.idle_add(change_icon, indicator, index)
time.sleep(0.5)
if finished:
break
i += 1
def on_click(widget):
global finished
finished = True
Gtk.main_quit()
def main():
indicator = appindicator.Indicator.new(APPINDICATOR_ID, 'spinner-0.svg', appindicator.IndicatorCategory.SYSTEM_SERVICES)
indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
menu = Gtk.Menu()
quit = Gtk.MenuItem('Quit')
quit.connect('activate', on_click)
menu.append(quit)
menu.show_all()
indicator.set_menu(menu)
thread = threading.Thread(target=render_icon, args=(indicator,))
thread.daemon = True
thread.start()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
main()
我创建了一个带有 10 个不同帧的微调器,我可以使用 Thread 和set_icon
+进行迭代GLib.iddle_add()
。
同样,它在线程一致性方面需要更好的解决方案,但它可以作为一个起点。
推荐阅读
- python - KeyError:'requestContext',FastAPI,Mangum,无服务器
- arrays - 尝试使用行和列进行文件 I/O,定位 FILE 时出现问题 *
- ssrs-2012 - SSRS 中的除法运算
- symfony - 尝试在 Gmail 中使用 Symfony 邮件程序
- docker - docker dns 在主机上使用自定义 dns 失败
- javascript - javascript将日期转换为本地时区
- python - 如何使用 sklearn 模型访问 API 端点?
- python - .delete() 不适用于从 signals.py Django 调用的记录
- api - .NET Core API 中的本地化
- javascript - Node.js/Gulp 中的多行正则表达式未捕获