Oct-02-2022, 08:39 PM
I don't really understand what you want to do there.
But here is an old reminder I once made. Maybe it helps a little.
You can display a reminder at a specific time and execute a command if you want.
But here is an old reminder I once made. Maybe it helps a little.
You can display a reminder at a specific time and execute a command if you want.
#!/usr/bin/env python3 # -*- coding: utf-8 -*- from PyQt5.QtCore import Qt, QTimer, QMetaObject, QSettings, QProcess, QSize, QRect from PyQt5.QtWidgets import (QMessageBox, QApplication, QMainWindow, QPushButton, QGridLayout, QTextEdit, QLineEdit, QComboBox, QLabel, QWidget, QVBoxLayout) from PyQt5.QtMultimedia import QSound from PyQt5.QtGui import QIcon import sys, datetime import subprocess class Message(QWidget): def __init__(self, title, message, parent=None): QWidget.__init__(self, parent) self.setLayout(QGridLayout()) self.titleLabel = QLabel(title, self) self.titleLabel.setStyleSheet("color: #729fcf; font-size: 18px; font-weight: bold; padding: 0;") self.messageLabel = QLabel(message, self) self.messageLabel.setStyleSheet("color: #729fcf; font-size: 12px; font-weight: normal; padding: 0;") self.buttonClose = QPushButton(self) self.buttonClose.setIcon(QIcon.fromTheme("window-close")) self.buttonClose.setFlat(True) self.buttonClose.setFixedSize(32, 32) self.buttonClose.setIconSize(QSize(16, 16)) self.layout().addWidget(self.titleLabel) self.layout().addWidget(self.messageLabel, 2, 0) self.layout().addWidget(self.buttonClose, 0, 1) class Notification(QWidget): def __init__(self, parent = None): super(QWidget, self).__init__(parent = None) self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.setStyleSheet("background: #000000; padding: 0;") self.mainLayout = QVBoxLayout(self) def setNotify(self, title, message, timeout): self.m = Message(title, message) self.mainLayout.addWidget(self.m) self.m.buttonClose.clicked.connect(self.onClicked) self.show() QTimer.singleShot(timeout, 0, self.closeMe) def closeMe(self): self.close() self.m.close() def onClicked(self): self.close() class MyWindow(QMainWindow): def __init__(self, parent=None): super(MyWindow, self).__init__(parent) self.entry = "" self.settings = QSettings("myReminder", "reminder") self.setObjectName("MainWindow") self.setFixedSize(250, 240) self.setWindowTitle("Reminder") self.setAttribute(Qt.WA_DeleteOnClose) self.setStyleSheet(stylesheet(self)) self.statusBar().showMessage("choose Time") self.process = QProcess() self.process.started.connect(lambda: print("process started")) self.process.finished.connect(lambda: print("process finished")) self.process.errorOccurred.connect(lambda: print("process eror")) self.hour = QComboBox() self.hour.addItem("00") self.hour.addItem("01") self.hour.addItem("02") self.hour.addItem("03") self.hour.addItem("04") self.hour.addItem("05") self.hour.addItem("06") self.hour.addItem("07") self.hour.addItem("08") self.hour.addItem("09") for x in range(10, 24): self.hour.addItem(str(x)) self.minute = QComboBox() self.minute.addItem("00") self.minute.addItem("01") self.minute.addItem("02") self.minute.addItem("03") self.minute.addItem("04") self.minute.addItem("05") self.minute.addItem("06") self.minute.addItem("07") self.minute.addItem("08") self.minute.addItem("09") for x in range(10, 60): self.minute.addItem(str(x)) h = str(datetime.datetime.now().time().strftime('%H')) m = str(datetime.datetime.now().time().strftime('%M')) self.hour.setCurrentIndex(self.hour.findText(h)) self.minute.setCurrentIndex(self.minute.findText(m)+1) self.lblT = QLabel("Reminder at: ") self.lbl = QLabel(":") self.cwid = self.addToolBar("Time") self.cwid.setMovable(False) self.cwid.addWidget(self.lblT) self.cwid.addWidget(self.hour) self.cwid.addWidget(self.lbl) self.cwid.addWidget(self.minute) btn_start = QPushButton(self) btn_start.setGeometry(10, 180, 80, 26) btn_start.setIcon(QIcon.fromTheme("player-play")) btn_start.setText("Start") btn_start.setObjectName("btn") btn_start.clicked.connect(self.button_start_clicked) btn_stop = QPushButton(self) btn_stop.setGeometry(160, 180, 80, 26) btn_stop.setIcon(QIcon.fromTheme("player-stop")) btn_stop.setText("Stop") btn_stop.setObjectName("btn_stop") btn_stop.clicked.connect(self.button_stop_clicked) self.message_entry = QTextEdit(self) self.message_entry.setAcceptRichText(True) self.message_entry.setGeometry(10, 40, 230, 100) self.message_entry.setPlaceholderText("Message") self.app_entry = QLineEdit(self) self.app_entry.setGeometry(10, 150, 230, 26) self.app_entry.setPlaceholderText("set command to start") self.app_entry.setToolTip("set command to start") self.msound = QSound(None) self.mysound = '/usr/share/sounds/speech-dispatcher/test.wav' self.mymessage = "" self.timer = QTimer() self.timer.timeout.connect(self.update_label) self.readSettings() QMetaObject.connectSlotsByName(self) def updateEntry(self): mleft = self.hour.currentText() mright = self.minute.currentText() mtext = mleft + ":" + mright + ":00" self.entry = mtext self.message_entry.setFocus() def update_label(self): current_time = str(datetime.datetime.now().time().strftime('%H:%M:%S')) self.statusBar().showMessage(current_time + " / " + self.entry) if current_time == self.entry: self.timer.stop() self.msound.play(self.mysound) self.statusBar().showMessage("Reminder") myapp = self.app_entry.text() if not myapp == "": print("starting", myapp) subprocess.Popen(myapp, stdout=subprocess.PIPE, shell=True) self.showNotification(self.message_entry.toPlainText()) self.statusBar().showMessage("Timer gestoppt") def showNotification(self, message): self.notification = Notification() self.notification.setNotify("Reminder", message, 5000) r = QRect(self.x() + round(self.width() / 2) - round(self.notification.width() / 2), self.y() + 26, self.notification.m.messageLabel.width() + 30, self.notification.m.messageLabel.height()) self.notification.setGeometry(r) def button_start_clicked(self): self.updateEntry() self.statusBar().showMessage("Timer started ...") self.timer.start(1000) # 1 second self.showMinimized() def button_stop_clicked(self): self.timer.stop() self.statusBar().showMessage("Timer stopped") self.msound.play(self.mysound) def msgbox(self, message): QMessageBox.information(None, "Information", "<h2>Reminder:</h2>\n\n" + message) self.showMaximized() def readSettings(self): print("reading settings") if self.settings.contains("geometry"): self.setGeometry(self.settings.value('geometry')) if self.settings.contains("message"): self.message_entry.setText(self.settings.value("message")) if self.settings.contains("myapp"): self.app_entry.setText(self.settings.value("myapp")) def saveSettings(self): print("saving settings") self.settings.setValue('geometry', self.geometry()) self.settings.setValue('message', self.message_entry.toPlainText()) self.settings.setValue('myapp', self.app_entry.text()) def closeEvent(self,event): self.saveSettings() print("Goodbye ...") event.accept() def stylesheet(self): return """ QPushButton { font-size: 9pt; background: #729fcf; } QPushButton::hover { color: #f3f3f3; } QTextEdit { font-size: 9pt; background: #729fcf; border: 1px solid #d3d7cf; } QLineEdit { font-size: 9pt; background: #729fcf; border: 1px solid #d3d7cf; } QToolBar { margin-left: 10px; margin-right: 10px; margin-top: 4px; font-size: 9pt; background: #729fcf; border: 1px solid #d3d7cf; } QLabel { margin-left: 10px; margin-top: 4px; } QComboBox { width: 17px; padding-left: 5px; margin-top: 4px; font-size: 9pt; background: #729fcf; } QStatusBar { font-size: 7pt; color: #f3f3f3; padding-left: 10px; } QMainWindow { background: #729fcf; } """ if __name__ == "__main__": app = QApplication(sys.argv) main = MyWindow() main.show() sys.exit(app.exec_())