我需要更新系统托盘应用程序的现有菜单项。首先,当应用加载时,将有两个菜单项。稍后,当我单击一个按钮时,这些菜单项需要替换为新的菜单项。我怎样才能做到这一点?这是我的代码。
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_())
然而这不起作用。如果我尝试删除self.m.clear()
,新菜单项将附加到现有(在这种情况下这是正常行为)。不是menu.clear()
清除当前菜单&应该在这里填充新菜单?
我已经看到了类似的问题Qt QSystemTrayIcon change menu items,解决方案对我不起作用。我正在运行Ubuntu 14.04。
答案 0 :(得分:2)
我明白了,问题是由于self.tray.setContextMenu(self.m)
。从onClick
方法中删除此行。这应该适用于Ubuntu。