Пункты меню изменения Qt QSystemTrayIcon

Я использую 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)

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


person user654628    schedule 18.02.2012    source источник


Ответы (1)


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

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).

person alexisdm    schedule 18.02.2012
comment
Спасибо, по какой-то причине мне пришлось скрыть трей, а затем показать его, а затем настроить новое контекстное меню, чтобы оно отображалось. Может, это как-то связано с моей настройкой. - person user654628; 20.02.2012
comment
Имея точно такую ​​же проблему, приведенный выше код не работает в моем случае, как и в моем собственном приложении :-| Я на Ubuntu 12.04 LTS. - person N.B.K; 17.07.2014