Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 21, 2017 09:15:14

KsenZ
Зарегистрирован: 2016-11-07
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Периодическое оповещение

Собственно сабж.
Есть простенькое приложение на PyQt с трйем. Как можно реализовать периодическое оповещение, что бы, например, раз в сутки, при определенных условиях, показывалось уведомление?
У меня пока только мысль вот какая: записывать куда либо (sqlite или файл), дату и время последнего уведомления, и скажем раз в час проверять, прошло ли нужное количество времени, если да, то показываем уведомление, нет ждем дальше.
Может есть другие идеи?

Офлайн

#2 Дек. 21, 2017 10:19:08

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Периодическое оповещение

если прога сутками в трее, то питон - плохая идея.
для *nix - crontab
посмотри http://life-warrior.org/programs/takebreak

Офлайн

#3 Дек. 21, 2017 10:42:07

KsenZ
Зарегистрирован: 2016-11-07
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Периодическое оповещение

Прога не сутками в трейе. Ее могут запустить, а могут и не запускать.
Идея в том, что когда она все же запущена, от нее требуется периодическая проверка, о которой я писал выше.
crontab хорош не спорю для сервера и консоли, а тут не то и не другое. Да и само приложение, хоть и работает и на Windows и на Linux, все же в 99% будет запускаться под виндой.

Офлайн

#4 Дек. 21, 2017 11:12:02

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Периодическое оповещение

для вин есть http://www.nncron.ru/index_ru
в PyQt - QTimer. время можно забить в программу(по дефолту) или читать из файла. если время одно и то же, то ничего перезаписывать не надо, только прочитать при запуске

Офлайн

#5 Дек. 21, 2017 11:42:08

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Периодическое оповещение

 допустим время проверки - 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
и запускаешь таймер на интервал sec*1000 (msec)

Офлайн

#6 Янв. 1, 2018 13:32:13

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

Периодическое оповещение

KsenZ
Собственно сабж.Есть простенькое приложение на PyQt с трйем. Как можно реализовать периодическое оповещение, что бы, например, раз в сутки, при определенных условиях, показывалось уведомление?У меня пока только мысль вот какая: записывать куда либо (sqlite или файл), дату и время последнего уведомления, и скажем раз в час проверять, прошло ли нужное количество времени, если да, то показываем уведомление, нет ждем дальше.Может есть другие идеи?
База данных тут точно не требуется. Нужно сделать список со временем, во сколько осуществлять вывод сообщения, реализовать проверку текущего времени по этому списку с выводом уведомления.

Офлайн

#7 Янв. 9, 2018 09:18:53

KsenZ
Зарегистрирован: 2016-11-07
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Периодическое оповещение

Может быть кому пригодится. Сделал я примерно так:

 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version