Как я могу иметь анимированную иконку в системном трее в PyQt4?
Я пытаюсь создать анимированный значок systray для приложения pyqt4, но у меня возникают проблемы с поиском примеров в python. Это самое близкое, что я могу найти, но это в C++, и я не знаю, как его перевести: есть ли способ иметь (анимированное) изображение GIF в виде иконки в системном трее с pyqt?
Как я могу сделать это либо с анимированным GIF, либо с помощью серии неподвижных изображений в качестве кадров?
1 ответ
Решение
Может быть как то так Создайте QMovie
экземпляр для использования AnimatedSystemTrayIcon
, Подключиться к frameChanged
сигнал фильма и звонок setIcon
на QSystemTrayIcon
, Вам нужно конвертировать растровое изображение, возвращаемое QMovie.currentPixmap
к QIcon
перейти к setIcon
,
Отказ от ответственности, только проверено на Linux.
import sys
from PyQt4 import QtGui
class AnimatedSystemTrayIcon(QtGui.QSystemTrayIcon):
def UpdateIcon(self):
icon = QtGui.QIcon()
icon.addPixmap(self.iconMovie.currentPixmap())
self.setIcon(icon)
def __init__(self, movie, parent=None):
super(AnimatedSystemTrayIcon, self).__init__(parent)
menu = QtGui.QMenu(parent)
exitAction = menu.addAction("Exit")
self.setContextMenu(menu)
self.iconMovie = movie
self.iconMovie.start()
self.iconMovie.frameChanged.connect(self.UpdateIcon)
def main():
app = QtGui.QApplication(sys.argv)
w = QtGui.QWidget()
trayIcon = AnimatedSystemTrayIcon(movie=QtGui.QMovie("cat.gif"), parent=w)
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('Anim Systray')
w.show()
trayIcon.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()