【问题标题】:Update menu in QT system tray applicationQT 系统托盘应用程序中的更新菜单
【发布时间】:2014-07-20 07:00:31
【问题描述】:

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

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。

【问题讨论】:

  • 您的代码适用于 Windows 8.0(Python 2.7.3-32bit)上的 PySide 1.2.2。最初,菜单具有“第一”和“第二”条目。当我单击按钮时,菜单有“第一个”和“第三个”条目。这似乎是一个特定于平台的问题(甚至可能与 Qt 本身有关)。
  • @three_pineapples 谢谢。
  • 在 KDE (Kubuntu) 中,您的代码可以正常工作。可能是 Ubuntu Unity UI 中的一个错误。
  • 与 Ubuntu 一样,它也不适用于 Elementary OS。 EOS 不使用 Unity(如果我错了,请纠正我)。正如@doru 所指出的,它在 Kubuntu 中工作(在 13.04 中检查)

标签: python pyqt pyside system-tray qmenu


【解决方案1】:

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

【讨论】:

  • 是的,就是这样。现在它可以在 Windows 和 Ubuntu 上运行。仍然不知道为什么它早先在除 Ubuntu 之外的所有其他平台上工作:-/
猜你喜欢
  • 1970-01-01
  • 2010-10-27
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多