Как я могу иметь анимированную иконку в системном трее в 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()
Другие вопросы по тегам