Как добавить действие в контекстное меню из функции QSystemTrayIcon

Я попытался найти в документации PySide6 информацию о классах QMenu и QSystemTray, но мне не удалось найти никакой информации о добавлении действий в контекстное меню из функции. Вот код, который я пробовал:

      from PySide6.QtWidgets import QSystemTrayIcon, QMenu
from PySide6 import QtWidgets
from PySide6.QtGui import QIcon, QAction
import sys

class MyWidget(QtWidgets.QSystemTrayIcon):
    def __init__(self):
        super().__init__()
        self.trayIcon = QSystemTrayIcon()
        self.trayIcon.setIcon(QIcon("icon.png"))
        self.trayIcon.setVisible(True)
        self.menu = QMenu()
        self.quit = QAction("Quit")
        self.quit.triggered.connect(app.quit)
        self.menu.addAction(self.quit)
        self.menu.updatesEnabled()
        self.menu.setUpdatesEnabled(True)
        self.trayIcon.setContextMenu(self.menu)
        self.trayIcon.activated.connect(self.addMenuAction)
    def addMenuAction(self):
        self.menu.addAction(QAction("Action"))
        self.menu.update()
if __name__ == "__main__":
    app = QtWidgets.QApplication([])

    widget = MyWidget()
    widget.show()

    sys.exit(app.exec_())

1 ответ

Проблема в том, что созданный вами QAction не имеет права собственности, поэтому он будет немедленно уничтожен, поскольку это локальная переменная. Есть 2 варианта:

      action = QAction("Action", self)
self.menu.addAction(action)

ИЛИ ЖЕ

      action = self.menu.addAction("Action")
Другие вопросы по тегам