3
import sys
from PyQt5.QtWidgets import QSystemTrayIcon, QApplication, QMenu
from PyQt5.QtGui import QIcon

class autoparse():
    def __init__(self):

       self.main()

    def main(self):
        app = QApplication(sys.argv)

        self.trayIcon = QSystemTrayIcon(QIcon("icons\icon-windowed.ico"), app)
        self.menu = QMenu()
        self.autopconfig = self.menu.addAction('Config')
        self.autopconfig.triggered.connect(self.swapicon)
        self.trayIcon.setContextMenu(self.menu)

        self.trayIcon.show()
        sys.exit(app.exec_())
    def swapicon(self):
        QSystemTrayIcon.setIcon(QIcon("icons\python.ico"))

test1 = autoparse()

我可以让初始图标设置得很好,我可以通过为应用程序创建 2 个图标然后执行 self.trayIcon.hide() 和 self.newicon.show() 来解决这个问题,但我不觉得这是正确的方法。

Pycharm 显示一条通知,上面写着“预期的 QSystemTrayIcon,得到了 QIcon”,但如果我与之交换QIconQSystemTrayIcon它会说Qicon丢失。SOOOOOO 我把它改成QSystemTrayIcon(QIcon("icons\python.ico")它仍然说QIcon是未填充的。似乎问题检测正在循环中。

当我运行 swapicon 函数时,按原样运行代码会给我“setIcon (self, QIcon):未绑定方法的第一个参数必须具有类型‘QSystemTrayIcon’”。如果我删除 QIcon 所以它只是 setIcon (file) 然后我得到“setIcon (self, QIcon): not enough arguments”

4

1 回答 1

4

QSystemTrayIcon 不是静态元素,因此要更改某些属性,您必须使用实例,在您的情况下,您必须更改:

QSystemTrayIcon.setIcon(QIcon("icons\python.ico"))

到:

self.trayIcon.setIcon(QIcon("icons\python.ico"))

您可能已经对 混淆了QSystemTrayIcon(QIcon("icons\icon-windowed.ico"), app),这是一个构造函数,可以接收图标。

于 2017-07-08T06:38:43.670 回答