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 仅显示占位符而不显示真实图标