如何在 PyQt4 中拥有动画系统托盘图标?

use*_*563 3 python qt system-tray pyqt pyqt4

我正在尝试为 pyqt4 应用程序创建一个动画系统托盘图标,但在 python 中找不到任何示例。这是我能找到的最接近的,但它是用 C++ 编写的,我不知道如何翻译它:Is there a way to have (animated)GIF image as system pad icon with pyqt?

我该如何使用动画 GIF 或使用一系列静态图像作为框架来实现此目的?

Pau*_*ney 5

也许是这样的。创建QMovie要使用的实例AnimatedSystemTrayIcon。连接到frameChanged电影的信号并拨打setIcon电话QSystemTrayIcon。您需要将 a 返回的像素图转换QMovie.currentPixmap为 aQIcon以传递给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()
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的解决方案。它对我有用。+1 提问,+1 回答。 (2认同)