Найти - Пользователи
Полная версия: Периодическое оповещение
Начало » GUI » Периодическое оповещение
1
KsenZ
Собственно сабж.
Есть простенькое приложение на PyQt с трйем. Как можно реализовать периодическое оповещение, что бы, например, раз в сутки, при определенных условиях, показывалось уведомление?
У меня пока только мысль вот какая: записывать куда либо (sqlite или файл), дату и время последнего уведомления, и скажем раз в час проверять, прошло ли нужное количество времени, если да, то показываем уведомление, нет ждем дальше.
Может есть другие идеи?
vic57
если прога сутками в трее, то питон - плохая идея.
для *nix - crontab
посмотри http://life-warrior.org/programs/takebreak
KsenZ
Прога не сутками в трейе. Ее могут запустить, а могут и не запускать.
Идея в том, что когда она все же запущена, от нее требуется периодическая проверка, о которой я писал выше.
crontab хорош не спорю для сервера и консоли, а тут не то и не другое. Да и само приложение, хоть и работает и на Windows и на Linux, все же в 99% будет запускаться под виндой.
vic57
для вин есть http://www.nncron.ru/index_ru
в PyQt - QTimer. время можно забить в программу(по дефолту) или читать из файла. если время одно и то же, то ничего перезаписывать не надо, только прочитать при запуске
vic57
 допустим время проверки - 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)
Kyrym
KsenZ
Собственно сабж.Есть простенькое приложение на PyQt с трйем. Как можно реализовать периодическое оповещение, что бы, например, раз в сутки, при определенных условиях, показывалось уведомление?У меня пока только мысль вот какая: записывать куда либо (sqlite или файл), дату и время последнего уведомления, и скажем раз в час проверять, прошло ли нужное количество времени, если да, то показываем уведомление, нет ждем дальше.Может есть другие идеи?
База данных тут точно не требуется. Нужно сделать список со временем, во сколько осуществлять вывод сообщения, реализовать проверку текущего времени по этому списку с выводом уведомления.
KsenZ
Может быть кому пригодится. Сделал я примерно так:
 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_())
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB