Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import pickle
- from datetime import datetime
- from PyQt5.QtCore import Qt, QTimer, QDateTime
- from PyQt5.QtWidgets import *
- from win10toast import ToastNotifier
- path = 'reminder.rmd'
- class Reminder(QListWidgetItem):
- def __init__(self, text, datetime):
- self.text = text
- self.datetime = datetime
- super(Reminder, self).__init__(self.__str__())
- def __str__(self):
- return '{:<30}{:<50}'.format(self.datetime.strftime("%d.%m.%Y %H:%M:%S"), self.text)
- def getText(self):
- return self.text
- def getDateTime(self):
- return self.datetime
- def save_reminder(reminders):
- pickleObj = [(reminder.text, reminder.datetime) for reminder in reminders]
- with open(path, 'wb') as reminderFile:
- pickle.dump(pickleObj, reminderFile)
- def load_reminders():
- if os.path.isfile(path):
- with open(path, 'rb') as reminderFile:
- pickleObj = pickle.load(reminderFile)
- return [Reminder(text, datetime) for text, datetime in pickleObj]
- return []
- class MainWindow(QWidget):
- def __init__(self, *args, **kwargs):
- super(MainWindow, self).__init__(*args, **kwargs)
- self.setWindowTitle("RemindMe")
- phText = 'Woran möchtest du erinnert werden?'
- layoutHorTop = QHBoxLayout()
- layoutHorBottom = QHBoxLayout()
- layoutVer = QVBoxLayout()
- inputText = QTextEdit()
- inputText.setFixedSize(200, 50)
- inputText.setPlaceholderText(phText)
- checkboxDate = QCheckBox('Erinnern am:')
- inputDate = QDateTimeEdit()
- inputDate.setFixedSize(110, 25)
- checkboxTime = QCheckBox('Erinnern in:')
- inputTime = QTimeEdit()
- inputTime.setFixedSize(80, 25)
- inputTime.setDisplayFormat('hh:mm:ss')
- buttonRemind = QPushButton('Erinnere mich!')
- buttonRemind.setFixedSize(100, 30)
- buttonReset = QPushButton('RESET')
- buttonReset.setFixedSize(100, 30)
- self.listReminderView = QListWidget()
- for reminder in load_reminders():
- self.listReminderView.addItem(reminder)
- layoutHorTop.addWidget(inputText)
- layoutHorTop.addWidget(checkboxDate)
- layoutHorTop.addWidget(inputDate) # Kalender
- layoutHorTop.addWidget(checkboxTime)
- layoutHorTop.addWidget(inputTime) # Timer
- layoutVer.addLayout(layoutHorTop) # Textbox und Dropdown
- layoutVer.addWidget(self.listReminderView)
- layoutVer.addLayout(layoutHorBottom)
- layoutHorBottom.addWidget(buttonRemind)
- layoutHorBottom.addWidget(buttonReset)
- self.setLayout(layoutVer)
- self.trayIcon = QSystemTrayIcon(self)
- self.trayIcon.setIcon(self.style().standardIcon(QStyle.SP_ComputerIcon))
- show_action = QAction("Show", self)
- show_action.triggered.connect(self.showWindow)
- tray_menu = QMenu()
- tray_menu.addAction(show_action)
- self.trayIcon.setContextMenu(tray_menu)
- timer = QTimer(self)
- timer.timeout.connect(self.timerEvent)
- timer.start(1000)
- buttonReset.clicked.connect(self.on_button_reset_clicked)
- buttonRemind.clicked.connect(
- lambda: self.on_button_remind_clicked(inputText.toPlainText(), checkboxDate, checkboxTime, inputDate,
- inputTime))
- checkboxDate.stateChanged.connect(lambda: self.on_check_state_changed(checkboxDate, checkboxTime))
- checkboxTime.stateChanged.connect(lambda: self.on_check_state_changed(checkboxTime, checkboxDate))
- def timerEvent(self):
- now = datetime.now()
- for i in range(self.listReminderView.count()):
- x = self.listReminderView.item(i)
- if now > x.getDateTime():
- toaster = ToastNotifier()
- toaster.show_toast("RemindMe", x.getText(), duration=3, threaded=True)
- self.listReminderView.removeItemWidget(x)
- def on_button_reset_clicked(self):
- self.listReminderView.clear()
- def eval_checkboxes(self, checkboxDate, checkboxTime, inputDate, inputTime):
- if checkboxDate.isChecked():
- return inputDate.dateTime().toPyDateTime()
- elif checkboxTime.isChecked():
- return QDateTime.currentDateTime().addSecs(inputTime.time().second() + inputTime.time().minute() * 60 + inputTime.time().hour() * 3600).toPyDateTime()
- else:
- return None
- def on_check_state_changed(self, checkboxDate, checkboxTime):
- if checkboxDate.isChecked() and checkboxTime.isChecked():
- checkboxTime.setCheckState(Qt.Unchecked)
- def on_button_remind_clicked(self, remindText, checkboxDate, checkboxTime, inputDate, inputTime):
- pointInTime = self.eval_checkboxes(checkboxDate, checkboxTime, inputDate, inputTime)
- if pointInTime is not None:
- reminder = Reminder(remindText, pointInTime)
- self.listReminderView.addItem(reminder)
- else:
- return
- def closeEvent(self, event):
- reminders = [self.listReminderView.item(i) for i in range(self.listReminderView.count())]
- save_reminder(reminders)
- event.accept()
- def hideEvent(self, hideEvent):
- hideEvent.ignore()
- self.hide()
- self.trayIcon.show()
- def showWindow(self):
- self.show()
- self.setWindowState(Qt.WindowActive)
- self.activateWindow()
- self.trayIcon.hide()
- app = QApplication([])
- # app.setStyle('Windows')
- window = MainWindow()
- window.show()
- app.exec_()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement