PyQt5 QSystemTrayIcon.setIcon не работает, чтобы изменить значок в трее

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 показывает уведомление о том, что "Expected QSystemTrayIcon, получил QIcon", но если я поменяюсь QIcon с QSystemTrayIcon тогда это говорит Qicon пропал, отсутствует. SOOOOOO Я изменить его на QSystemTrayIcon(QIcon("icons\python.ico") и это все еще говорит QIcon не заполнено. Похоже, что проблема обнаружения идет по кругу.

Запуск кода "как есть" дает мне "setIcon(self, QIcon): первый аргумент несвязанного метода должен иметь тип" QSystemTrayIcon "", когда я запускаю функцию swapicon. Если я удаляю QIcon, так что это просто setIcon (файл), то я получаю "setIcon(self, QIcon): недостаточно аргументов"

1 ответ

Решение

QSystemTrayIcon не является статическим элементом, поэтому для изменения какого-либо свойства вы должны использовать экземпляр, в вашем случае вы должны изменить:

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

чтобы:

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

Вы могли быть смущены с QSystemTrayIcon(QIcon("icons\icon-windowed.ico"), app)это конструктор и может получить значок.

Другие вопросы по тегам