Форум сайта python.su
Собственно сабж.
Есть простенькое приложение на PyQt с трйем. Как можно реализовать периодическое оповещение, что бы, например, раз в сутки, при определенных условиях, показывалось уведомление?
У меня пока только мысль вот какая: записывать куда либо (sqlite или файл), дату и время последнего уведомления, и скажем раз в час проверять, прошло ли нужное количество времени, если да, то показываем уведомление, нет ждем дальше.
Может есть другие идеи?
Офлайн
если прога сутками в трее, то питон - плохая идея.
для *nix - crontab
посмотри http://life-warrior.org/programs/takebreak
Офлайн
Прога не сутками в трейе. Ее могут запустить, а могут и не запускать.
Идея в том, что когда она все же запущена, от нее требуется периодическая проверка, о которой я писал выше.
crontab хорош не спорю для сервера и консоли, а тут не то и не другое. Да и само приложение, хоть и работает и на Windows и на Linux, все же в 99% будет запускаться под виндой.
Офлайн
для вин есть http://www.nncron.ru/index_ru
в PyQt - QTimer. время можно забить в программу(по дефолту) или читать из файла. если время одно и то же, то ничего перезаписывать не надо, только прочитать при запуске
Офлайн
допустим время проверки - 18.00
>>> from datetime import datetime as dt >>> now = dt.now() >>> tmr = dt(now.year,now.month,now.day,18) >>> delta = tmr - now >>> sec = delta.seconds >>> sec 19341
Офлайн
KsenZБаза данных тут точно не требуется. Нужно сделать список со временем, во сколько осуществлять вывод сообщения, реализовать проверку текущего времени по этому списку с выводом уведомления.
Собственно сабж.Есть простенькое приложение на PyQt с трйем. Как можно реализовать периодическое оповещение, что бы, например, раз в сутки, при определенных условиях, показывалось уведомление?У меня пока только мысль вот какая: записывать куда либо (sqlite или файл), дату и время последнего уведомления, и скажем раз в час проверять, прошло ли нужное количество времени, если да, то показываем уведомление, нет ждем дальше.Может есть другие идеи?
Офлайн
Может быть кому пригодится. Сделал я примерно так:
import sys from datetime import datetime from socket import * from PyQt5.QtWidgets import QSystemTrayIcon, QMenu, QAction, QApplication, qApp from PyQt5.QtGui import QIcon, QDesktopServices from PyQt5.QtCore import Qt, QUrl, QTimer, pyqtSlot class RightClickMenu(QMenu): def __init__(self, parent=None): QMenu.__init__(self, "Menu", parent) quit_action = QAction("Выход", self) quit_action.triggered.connect(qApp.quit) self.addAction(quit_action) class Client(QSystemTrayIcon): def __init__(self, parent=None): QSystemTrayIcon.__init__(self, parent) self.setIcon(QIcon("icon.png")) self.right_menu = RightClickMenu() self.setContextMenu(self.right_menu) self.activated.connect(self.click_trap) self.ellapsed_sec = 0 self.timer = QTimer() self.timer.setInterval(180000) self.timer.setTimerType(Qt.PreciseTimer) self.timer.timeout.connect(self.on_timer) self.timestamp_start = datetime.now() self.timer.start(180000) @pyqtSlot() def on_timer(self): self.ellapsed_sec += 1 delta = datetime.now() - self.timestamp_start delta = delta.total_seconds() if self.ellapsed_sec != delta: self.my_func() def click_trap(self, value): if value == self.Trigger: self.showMessage("Оповещение", "Нажали на иконку.", QSystemTrayIcon.Information) def my_func(self): self.showMessage("Оповещение", "Прошло 3 минуты.", QSystemTrayIcon.Critical) def show(self): QSystemTrayIcon.show(self) if __name__ == "__main__": app = QApplication(sys.argv) tray = Client() tray.show() sys.exit(app.exec_())
Отредактировано KsenZ (Янв. 9, 2018 09:20:32)
Офлайн