Python Qt QSystemTrayIcon更改菜单项 我使用Pyqt,但是C++代码很好。我正在尝试使用Linux(Ubuntu11.10)中的QT框架更改QSystemTrayIcon中的一个菜单项。目前,我已尝试重置最初设置的QMenu: self.tray = QSystemTrayIcon() m = QMenu() m.addAction('First') m.addAction('Second') tray.setContextMenu(m)

Python Qt QSystemTrayIcon更改菜单项 我使用Pyqt,但是C++代码很好。我正在尝试使用Linux(Ubuntu11.10)中的QT框架更改QSystemTrayIcon中的一个菜单项。目前,我已尝试重置最初设置的QMenu: self.tray = QSystemTrayIcon() m = QMenu() m.addAction('First') m.addAction('Second') tray.setContextMenu(m),python,qt,menu,pyqt,system-tray,Python,Qt,Menu,Pyqt,System Tray,我把它放在我的类中,并使tray成为类变量。我在想,如果我只是更改托盘以设置新菜单,它将更新: new_m = QMenu() new_m.addAction('First') new_m.addAction('Third') self.tray.setContextMenu(new_m) 但是,这不起作用,托盘菜单仍然与最初制作的相同。我如何才能重建菜单来更改它?我使用以下代码进行了测试,它似乎工作正常: from PyQt4.QtGui import * import sys class

我把它放在我的类中,并使tray成为类变量。我在想,如果我只是更改托盘以设置新菜单,它将更新:

new_m = QMenu()
new_m.addAction('First')
new_m.addAction('Third')
self.tray.setContextMenu(new_m)

但是,这不起作用,托盘菜单仍然与最初制作的相同。我如何才能重建菜单来更改它?

我使用以下代码进行了测试,它似乎工作正常:

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

我使用以下代码进行了测试,它似乎工作正常:

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

谢谢,出于某种原因,我不得不隐藏该托盘,然后将其显示,然后设置一个新的上下文菜单使其显示。也许它与我的设置有关。有着完全相同的问题,上面的代码在我的情况下不能像在我自己的应用程序中一样工作:-我在Ubuntu 12.04 LTS上。谢谢,出于某种原因,我不得不隐藏托盘,然后显示它,然后为它设置一个新的上下文菜单。也许它与我的设置有关。有着完全相同的问题,上面的代码在我的情况下不能像在我自己的应用程序中一样工作:-我在Ubuntu 12.04 LTS上。