Created
April 8, 2013 17:53
-
-
Save hogelog/5338905 to your computer and use it in GitHub Desktop.
QSystemTrayIcon Example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# Import PySide classes | |
import sys | |
from PySide.QtCore import * | |
from PySide.QtGui import * | |
class App: | |
def __init__(self): | |
# Create a Qt application | |
self.app = QApplication(sys.argv) | |
icon = QIcon("jenkins_favicon.png") | |
menu = QMenu() | |
settingAction = menu.addAction("setting") | |
settingAction.triggered.connect(self.setting) | |
exitAction = menu.addAction("exit") | |
exitAction.triggered.connect(sys.exit) | |
self.tray = QSystemTrayIcon() | |
self.tray.setIcon(icon) | |
self.tray.setContextMenu(menu) | |
self.tray.show() | |
self.tray.setToolTip("unko!") | |
self.tray.showMessage("hoge", "moge") | |
self.tray.showMessage("fuga", "moge") | |
def run(self): | |
# Enter Qt application main loop | |
self.app.exec_() | |
sys.exit() | |
def setting(self): | |
self.dialog = QDialog() | |
self.dialog.setWindowTitle("Setting Dialog") | |
self.dialog.show() | |
if __name__ == "__main__": | |
app = App() | |
app.run() |
First of all, great working example, thank you for it.
Is there a way to keep the application running after activating QDialog? I'm trying to do something similar, but whenever i open a QDialog with some QInputDialogs and finish working on them, the QSystemTrayIcon does not respond to any further commands. Menu does not show with right click and i cannot close the application.I'm having the same issue... Did you find a solution? (Using PyQt5 on macOS over here..)
import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import (QApplication, QMainWindow, QMenu, QSystemTrayIcon)
class App(QMainWindow):
def __init__(self, parent=None):
super(App, self).__init__(parent)
# Load UI from file
# uic.loadUi("app.ui", self)
# Or write your entire UI in code
self.setFixedSize(640, 480)
# SysTray Icon
self.tray = QSystemTrayIcon(self)
# Check if System supports STray icons
if self.tray.isSystemTrayAvailable():
self.tray.setIcon(self.windowIcon())
# Context Menu
ctmenu = QMenu()
actionshow = ctmenu.addAction("Show/Hide")
actionshow.triggered.connect(lambda: self.hide() if self.isVisible() else self.show())
actionquit = ctmenu.addAction("Quit")
actionquit.triggered.connect(self.close)
self.tray.setContextMenu(ctmenu)
self.tray.show()
else:
# Destroy unused var
self.tray = None
# Show App
self.show()
if __name__ == "__main__":
application = QApplication(sys.argv)
application.setApplicationName("App Name")
application.setApplicationVersion("1.1.1.1.1")
application.setOrganizationName("dev name")
win = App()
sys.exit(application.exec_())
More info:
This worked for me just replacing PyQt5
with PySide2
. This pops the icon up on the top menu bar on macOS. Related question: how do you set the application icon on the macOS dock?
Thank you. It works great.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I'm having the same issue... Did you find a solution? (Using PyQt5 on macOS over here..)