Qt QSystemTrayIcon изменить пункты меню - PullRequest
1 голос
/ 18 февраля 2012

Я использую Pyqt, но код на С ++ в порядке.Я пытаюсь изменить пункт меню в QSystemTrayIcon, используя каркас QT в Linux (Ubuntu 11.10).В настоящее время я попытался сбросить QMenu, который я первоначально установил:

self.tray = QSystemTrayIcon()
m = QMenu()
m.addAction('First')
m.addAction('Second')
tray.setContextMenu(m)

Я помещаю это в свой класс и делаю трей переменным класса.Я думал, что, если я просто изменю лоток, чтобы установить новое меню, оно обновится:

new_m = QMenu()
new_m.addAction('First')
new_m.addAction('Third')
self.tray.setContextMenu(new_m)

Однако это не работает, и меню лотка остается таким же, как было изначально.Как я могу перестроить меню, чтобы изменить его?

1 Ответ

1 голос
/ 18 февраля 2012

Я тестировал следующий код, и он, кажется, работает нормально:

from PyQt4.QtGui import *
import sys

class MainWindow(QMainWindow):
  def __init__(self):
    super(MainWindow, self).__init__()

    self.tray = QSystemTrayIcon(QApplication.style().standardIcon(QStyle.SP_DriveDVDIcon), self)
    m = QMenu()
    m.addAction('First')
    m.addAction('Second')
    self.tray.setContextMenu(m)
    self.tray.show()

    p = QPushButton("test", self)
    self.setCentralWidget(p)
    p.clicked.connect(self.onClick)

  def onClick(self):
    new_m = QMenu()
    new_m.addAction('First')
    new_m.addAction('Third')
    self.tray.setContextMenu(new_m)

app = QApplication(sys.argv)
w = MainWindow()
w.show();
sys.exit(app.exec_())

Вы уверены, что существует только один QSystemTrayIcon объект?(В ваших фрагментах есть и self.tray, и tray).

...