编程语言
首页 > 编程语言> > python – QT系统托盘应用程序中的更新菜单

python – QT系统托盘应用程序中的更新菜单

作者:互联网

我需要更新系统托盘应用程序的现有菜单项.首先,当应用加载时,将有两个菜单项.稍后,当我单击一个按钮时,这些菜单项需要替换为新的菜单项.我怎样才能做到这一点?这是我的代码.

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.

解决方法:

我想通了,问题是由于self.tray.setContextMenu(self.m).从onClick方法中删除此行.这应该在Ubuntu上正常工作.

标签:python,pyqt,pyside,system-tray,qmenu
来源: https://codeday.me/bug/20190703/1363850.html