Skip to content

Instantly share code, notes, and snippets.

@eyllanesc
Created May 26, 2018 18:28
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save eyllanesc/3435d59fb8c6695c948cf989a8866325 to your computer and use it in GitHub Desktop.
Save eyllanesc/3435d59fb8c6695c948cf989a8866325 to your computer and use it in GitHub Desktop.
import sys
import os
from PySide2.QtCore import Qt, QObject, Signal, Slot, Property
from PySide2.QtWidgets import QApplication, QSystemTrayIcon, QStyle, QAction, QMenu, QMessageBox
from PySide2.QtQml import QQmlApplicationEngine
my_list = ['here','is','my','list']
class Manager(QObject):
stationsChanged = Signal()
def __init__(self):
QObject.__init__(self)
self.m_stations =[]
@Property('QVariantList', notify=stationsChanged)
def stations(self):
return self.m_stations
@stations.setter
def set_stations(self, val):
if self.m_stations == val:
return
self.m_stations = val[:]
self.stationsChanged.emit()
def list_fill(self):
self.stations = my_list
class SystemTrayIconManager(QObject):
def __init__(self, window, parent=None):
QObject.__init__(self, parent)
self.window = window
self.window.closing.connect(self.onClosing)
self.tray_icon = QSystemTrayIcon(self)
self.tray_icon.setIcon(qApp.style().standardIcon(QStyle.SP_MediaPlay))
show_action = QAction("Show", self)
quit_action = QAction("Exit", self)
hide_action = QAction("Hide", self)
minimize_action = QAction("Minimize", self)
show_action.triggered.connect(self.window.show)
hide_action.triggered.connect(self.window.hide)
quit_action.triggered.connect(qApp.quit)
minimize_action.triggered.connect(self.minimize)
tray_menu = QMenu()
tray_menu.addAction(show_action)
tray_menu.addAction(hide_action)
tray_menu.addAction(quit_action)
tray_menu.addAction(minimize_action)
self.tray_icon.setContextMenu(tray_menu)
self.tray_icon.show()
def onClosing(self):
if self.tray_icon.isVisible():
QMessageBox.information(None, "Systray",
"The program will keep running in the system tray. To "
"terminate the program, choose <b>Quit</b> in the "
"context menu of the system tray entry.")
self.window.hide()
def minimize(self):
self.window.hide()
self.tray_icon.showMessage(
"Tray Program",
"Application was minimized to Tray",
QSystemTrayIcon.Information,
2000
)
if __name__ == "__main__":
os.environ["QT_QUICK_CONTROLS_STYLE"] = "Material"
app = QApplication(sys.argv)
if not QSystemTrayIcon.isSystemTrayAvailable():
QMessageBox.critical(None, "Systray",
"I couldn't detect any system tray on this system.")
sys.exit(1)
QApplication.setQuitOnLastWindowClosed(False)
engine = QQmlApplicationEngine()
manager = Manager()
ctx = engine.rootContext()
ctx.setContextProperty("Manager", manager)
engine.load('main.qml')
if not engine.rootObjects():
sys.exit(-1)
m = SystemTrayIconManager(engine.rootObjects()[0])
manager.list_fill()
sys.exit(app.exec_())
import QtQuick 2.10
import QtQuick.Controls 2.1
import QtQuick.Window 2.2
import QtQuick.Controls.Material 2.3
ApplicationWindow {
id: applicationWindow
Material.theme: Material.Light
title: qsTr("Test Invoke")
visible: false
width: 600
height: 500
ComboBox {
id: comboBox
width: 200
model: Manager.stations
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment