python pyqt pyside system-tray qmenu

python - Menú de actualización en la aplicación de bandeja de sistema QT



pyqt pyside (1)

Necesito actualizar los elementos de menú existentes para una aplicación de bandeja del sistema. Al principio, cuando se carga la aplicación, habrá dos elementos de menú. Más tarde, cuando hago clic en un botón, estos elementos del menú deben ser reemplazados por nuevos elementos del menú. ¿Cómo puedo lograr eso? Aquí está mi código.

from PySide.QtGui import * import sys class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.tray = QSystemTrayIcon(QApplication.style().standardIcon(QStyle.SP_DriveDVDIcon), self) self.m = QMenu() self.m.addAction(''First'') self.m.addAction(''Second'') self.tray.setContextMenu(self.m) self.tray.show() p = QPushButton("Click Me", self) self.setCentralWidget(p) p.clicked.connect(self.onClick) def onClick(self): self.m.clear() self.m.addAction(''First'') self.m.addAction(''Third'') self.tray.setContextMenu(self.m) app = QApplication(sys.argv) w = MainWindow() w.show(); sys.exit(app.exec_())

Sin embargo, esto no está funcionando. Si intento eliminar self.m.clear() los nuevos elementos del menú se agregarán al existente (que es el comportamiento normal en este caso). ¿ menu.clear() borra el menú actual y el nuevo menú debe menu.clear() aquí?

He visto esta pregunta similar Qt QSystemTrayIcon cambiar elementos de menú y la solución no funciona para mí. Estoy ejecutando Ubuntu 14.04.


Lo descubrí, el problema se debe a self.tray.setContextMenu(self.m) . Elimine esta línea del método onClick . Esto debería funcionar bien en Ubuntu.