【问题标题】:Qt QSystemTrayIcon change menu itemsQt QSystemTrayIcon 改变菜单项
【发布时间】:2012-03-09 10:33:27
【问题描述】:

我正在使用 Pyqt,但是 c++ 代码很好。我正在尝试使用 Linux(Ubuntu 11.10)中的 QT 框架更改 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)

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

【问题讨论】:

    标签: python qt menu pyqt system-tray


    【解决方案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 对象吗? (在您的 sn-ps 中,有 self.traytray)。

    【讨论】:

    • 谢谢,由于某种原因,我不得不隐藏托盘然后显示它,然后设置一个新的上下文菜单让它显示。也许它与我的设置有关。
    • 遇到完全相同的问题,上面的代码在我的情况下不能像我自己的应用程序一样工作:-|我在 Ubuntu 12.04 LTS 上。
    猜你喜欢
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多