Qt QSystemTrayIcon更改菜单项

时间:2012-02-18 03:15:42

标签: python qt menu pyqt system-tray

我正在使用Pyqt,但c ++代码很好。我正在尝试使用Linux中的QT框架(Ubuntu 11.10)更改QSystemTrayIcon中的菜单项。目前我已经尝试重置我最初设置的QMenu:

self.tray = QSystemTrayIcon()
m = QMenu()
m.addAction('First')
m.addAction('Second')
tray.setContextMenu(m)

我将它放在我的班级中,并使托盘成为一个类变量。我想如果我只是更换托盘来设置新菜单,它会更新:

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

然而,这不起作用,托盘菜单仍然与最初制作的相同。我怎样才能重建菜单来改变它?

1 个答案:

答案 0 :(得分:1)

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

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