Python Forum
[PyQt] Hide Dock Icon for QSystemTrayIcon App - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/Forum-Python-Coding)
+--- Forum: GUI (https://python-forum.io/Forum-GUI)
+--- Thread: [PyQt] Hide Dock Icon for QSystemTrayIcon App (/Thread-PyQt-Hide-Dock-Icon-for-QSystemTrayIcon-App)



Hide Dock Icon for QSystemTrayIcon App - AeglosGreeenleaf - Jun-20-2019

I have a Qt program that uses a QSystemTrayIcon. Only the tray icon shows on Windows, but on Mac the generic Python Launcher icon also shows up in the dock. How do I hide this?

Although there are a couple StackExchange posts about this, none of them seem to work for me. I've tried doing something like this to no avail.

QMainWindow.setWindowFlags(QtCore.Qt.Tool)
I also found some stuff about AppKit, but couldn't figure out how to use the PyObjC package. Besides, it seems like it should be simpler.

For reference, here is the section of code which creates the tray icon. There are no other widgets or windows.

from PySide2.QtGui import QIcon
from PySide2.QtWidgets import QApplication, QAction, QMenu, QSystemTrayIcon,\
    QMessageBox
from pkg_resources import require, DistributionNotFound, resource_filename

def main():
    app = QApplication(sys.argv)
    app.setStyle("fusion")

    # Create the tray
    tray = QSystemTrayIcon(QIcon(resource_filename("application.server",
                                                   "res/bolt.png")))
    menu = QMenu()
    controls = []

    controls.append(QAction("About"))
    controls[-1].triggered.connect(about)
    menu.addAction(controls[-1])

    controls.append(QAction("Check Status"))
    controls[-1].triggered.connect(status)
    menu.addAction(controls[-1])

    menu.addSeparator()

    controls.append(QAction("Launch client"))
    controls[-1].triggered.connect(client)
    menu.addAction(controls[-1])

    controls.append(QAction("Stop Server"))
    controls[-1].triggered.connect(stop)
    menu.addAction(controls[-1])

    # Add the menu to the tray
    tray.setContextMenu(menu)
    tray.show()

    app.exec_()
Thank you!