QSystemTrayIcon 未显示

Posted

技术标签:

【中文标题】QSystemTrayIcon 未显示【英文标题】:QSystemTrayIcon not showing 【发布时间】:2018-11-22 22:22:07 【问题描述】:

使用 Kubuntu 18.04 (qt5 5.9.5)、Python 3.6。我无法让此代码显示托盘图标;显示 Dropbox 等其他图标,但这不是:

import sys

from PyQt5.QtWidgets import QApplication, QMenu, QSystemTrayIcon, qApp, QMessageBox
from PyQt5.QtGui import QIcon


def run_something():
    print("Running something...")


if __name__ == '__main__':

    print("Creating application...")
    app = QApplication(sys.argv)

    print("Creating menu...")
    menu = QMenu()
    checkAction = menu.addAction("Check Now")
    checkAction.triggered.connect(run_something)
    quitAction = menu.addAction("Quit")
    quitAction.triggered.connect(qApp.quit)

    print("Creating icon...")
    icon = QIcon.fromTheme("system-help")

    print("Creating tray...")
    trayIcon = QSystemTrayIcon(icon, app)
    trayIcon.setContextMenu(menu)

    print("Showing tray...")
    trayIcon.show()
    trayIcon.setToolTip("unko!")
    trayIcon.showMessage("hoge", "moge")

    print("Running application...")
    sys.exit(app.exec_())

显示了消息(“hoge”、“moge”),但我在任何地方都找不到图标……正如other post 所说,在左上角也没有。

【问题讨论】:

QIcon QIcon::fromTheme(const QString &name, const QIcon &fallback) 返回当前图标主题中名称对应的QIcon。如果在当前主题中没有找到这样的图标,则返回后备。如果您想为不支持主题图标的平台提供有保证的回退,you can use the second argument : icon = QIcon.fromTheme("system-help", QIcon('branch-end.png')) 感谢@S.Nick,也尝试使用本地图标但没有成功。 抱歉,Windows 10 中一切正常。 还尝试过全新安装 Kubuntu 18.10,结果相同。 【参考方案1】:

不知道为什么,但是这段代码可以工作,唱 PySide2(基本上和上面的代码一样......):

import logging
import sys

from PySide2.QtGui import QIcon
from PySide2.QtWidgets import QSystemTrayIcon, QMenu, QApplication, QAction, QMessageBox


def run_something():
    print("Running something...")


def show_message():
    msg = QMessageBox()
    msg.setIcon(QMessageBox.Information)

    msg.setWindowTitle("MessageBox demo")
    msg.setText("This is a message box")

    msg.setInformativeText("This is additional information")
    msg.setDetailedText("The details are as follows:")
    msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
    msg.exec_()


def show_tray_message(tray: QSystemTrayIcon):
    tray.showMessage("Hoooo", "Message from tray")


if __name__ == '__main__':

    app = QApplication([])
    app.setQuitOnLastWindowClosed(False)

    tray = QSystemTrayIcon(QIcon("acorn.png"), app)
    menu = QMenu()

    action_test = QAction("Show a message box")
    action_test.triggered.connect(show_message)
    menu.addAction(action_test)

    action_tray_message = QAction("Show a message from tray")
    action_tray_message.triggered.connect(lambda: show_tray_message(tray))
    menu.addAction(action_tray_message)

    action_exit = QAction("Exit")
    action_exit.triggered.connect(app.exit)
    menu.addAction(action_exit)

    tray.setContextMenu(menu)
    tray.setToolTip("Tool tip")
    tray.show()

    sys.exit(app.exec_())

【讨论】:

也使用QIcon.fromTheme("system-help")进行了测试。【参考方案2】:

试试 PySide2。我今天刚刚在 Linux 和 Windows 上使用 PySide2 使用 QSystemTrayIcon 运行 PySimpleGUIQt。也许你会在那里有更好的运气?

【讨论】:

以上是关于QSystemTrayIcon 未显示的主要内容,如果未能解决你的问题,请参考以下文章

QSystemTrayIcon 仅显示占位符而不显示真实图标

Qt 系统托盘(加hover效果)

QtGui.QSystemTrayIcon settooltip 在 debian 拉伸中不起作用

Qt QSystemTrayIcon未发送激活信号

QSystemtrayicon:Mac 上没有图像

Qt 5.3 QSystemTrayIcon 无法正常工作[Linux]