Gesucht wird ein Programm das im Systray läuft und periodisch nach neuen E-Mails schaut und bei neuen E-Mails das Icon im Systray ändert.
Dieses Programm lässt das Icon im Sekundentakt blinken.
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import sys
from PyQt5 import QtCore
from PyQt5 import QtWidgets
from PyQt5.QtGui import QIcon
# das sind Standard-Icon-Bezeichnungen
ICON_MAIL_NEW = 'face-cool'
ICON_MAIL_EMTPY = 'mail-mark-read'
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.canExit = False
self.initUI()
app.setWindowIcon(QIcon.fromTheme(ICON_MAIL_EMTPY))
self.isNewMail = True
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.checkNewMail)
self.timer.start(1000)
def initUI(self):
self.bbCheckMail = QtWidgets.QAction(QIcon.fromTheme(ICON_MAIL_NEW), 'Check for Mail')
self.bbCheckMail.setCheckable(True)
self.bbCheckMail.triggered[bool].connect(self.displayNewMail)
self.toolbar = self.addToolBar('tb')
self.toolbar.addAction(self.bbCheckMail)
layout = QtWidgets.QGridLayout()
plain = QtWidgets.QPlainTextEdit()
layout.addWidget(plain, 0, 0)
centralWidget = QtWidgets.QWidget()
centralWidget.setLayout(layout)
self.setCentralWidget(centralWidget)
# SystemTrayIcon ersstellen
self.icon = QtWidgets.QSystemTrayIcon(QIcon.fromTheme(ICON_MAIL_NEW))
self.icon.show()
menu = QtWidgets.QMenu(parent=None)
menu.aboutToShow.connect(self.sysTrayAction)
self.icon.setContextMenu(menu)
self.setGeometry(300, 300, 300, 300)
# kein Show(), da dass Programm im Hintergrund laufen soll.
# self.show()
def closeEvent(self, event):
# do stuff
if self.canExit:
event.accept() # let the window close
else:
# Das Programm wird erst beim zweiten closeEvent geschlossen.
self.canExit = True
self.hide()
event.ignore()
def displayNewMail(self, active):
if active:
aIcon = QIcon.fromTheme(ICON_MAIL_NEW)
else:
aIcon = QIcon.fromTheme(ICON_MAIL_EMTPY)
self.bbCheckMail.setIcon(aIcon)
app.setWindowIcon(aIcon)
self.icon.setIcon(aIcon)
def checkNewMail(self):
self.isNewMail = not self.isNewMail
self.displayNewMail(self.isNewMail)
def sysTrayAction(self):
self.show()
print('System tray icon clicked.')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MWindow = MainWindow()
sys.exit(app.exec_())
Das Schwierigste an der Entwicklung von KDE-Anwendungen ist bei der Recherche herauszubekommen, ob die in den Weiten des Internets gefundenen Beispiele auch noch für die aktuelle KDE-Version gültig sind.
Ich arbeite zur Zeit mit:
Literatur