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)
это конструктор и может получить значок.