QSystemTrayIcon 如何判断是否被点击或聚焦

3 投票
1 回答
2953 浏览
提问于 2025-04-18 04:49

我有一个 QSystemTrayIcon 对象,想知道它现在是否被点击了。还有,怎么判断用户什么时候点击了托盘图标和它的菜单以外的地方?我在想这可能需要安装一个事件过滤器。

我有一个用户界面想要显示,但我只想在托盘图标没有被激活的时候显示,也就是说它的托盘图标没有被选中。所以我可以用 activated 信号来判断什么时候有人点击了它,但我怎么知道它什么时候不再激活呢?

我正在使用 python 2.7.3 和 PyQt5。

1 个回答

2

QSystemTrayIcon 中,有一个叫做 activated 的信号,它会把一个原因传递给连接的槽函数。我为你准备了一个简单的例子:

from PyQt4 import QtGui
import sys

class Window(QtGui.QMainWindow):

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        icon = QtGui.QSystemTrayIcon(self)
        icon.setIcon(QtGui.QIcon(r"path/to/icon.png"))
        icon.show()
        icon.activated.connect(self.systemIcon)

    def systemIcon(self, reason):
        if reason == QtGui.QSystemTrayIcon.Trigger:
            print 'Clicked'

if __name__ == "__main__":
    application = QtGui.QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(application.exec_())

如果你需要其他的事件,可以把 QSystemTrayIcon.Trigger 改成 QSystemTrayIcon.DoubleClickQSystemTrayIcon.Context 或者 QSystemTrayIcon.MiddleClick

撰写回答