summaryrefslogtreecommitdiff
path: root/PYTHON/Программа-напоминалка на Python.md
blob: d0c28e12a109fc01386df3785e6e9b41eb29da76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
### Установка и импорт библиотек

Перед написанием кода нам понадобится установить библиотеку **schedule** для планирования напоминаний и **plyer** для отображения системных уведомлений Windows. Сделать это можно через **pip**. Для этого нужно перейти в терминал/командную строку, прописать **pip install schedule plyer**, нажать Enter и ждать установки.

```bash
pip install schedule plyer
```

После инсталляции импортируем все необходимые библиотеки:

```python
import schedule
import time
from plyer import notification
```

- **schedule** — для планирования напоминаний;
- **time** — для работы с задержками;
- **plyer** — для отображения системных уведомлений.

### Написание кода программы-напоминалки на Python

Первым делом создадим функцию **show_notification()**, которая будет вызывать системное уведомление.

У функции будет присутствовать один параметр, а именно:

- message — текст оповещения, переданный пользователем.

```python
import schedule
import time
from plyer import notification


def show_notification(message):
```

Внутри функции через объект **notification** обратимся к методу **notify()**, чтобы создать уведомление с заголовком «Напоминание», переданным пользователем текстом и длительностью равной 10 секунд:


```python
import schedule
import time
from plyer import notification


def show_notification(message):
    notification.notify(
        title="Напоминание",
        message=message,
        timeout=10
    )
```

Теперь создадим функцию **add_reminder()**, которая будет создавать напоминания.

У функции будет присутствовать два параметра, а именно:

- text — текст напоминания;
- reminder_time — время, в которое должно сработать напоминание.

```python
import schedule
import time
from plyer import notification


def show_notification(message):
    notification.notify(
        title="Напоминание",
        message=message,
        timeout=10
    )


def add_reminder(text, reminder_time):
```

Внутри функции будет добавляться задача в планировщик, чтобы каждый день в указанное время **reminder_time** вызывалась функция **show_notification()** с переданным текстом:

```python
import schedule
import time
from plyer import notification


def show_notification(message):
    notification.notify(
        title="Напоминание",
        message=message,
        timeout=10
    )


def add_reminder(text, reminder_time):
    schedule.every().day.at(reminder_time).do(show_notification, message=text)
    print(f"Напоминание добавлено на {reminder_time}: {text}")
```

Теперь добавим точку входа, внутри которой будет находиться бесконечный цикл:

```python
import schedule
import time
from plyer import notification


def show_notification(message):
    notification.notify(
        title="Напоминание",
        message=message,
        timeout=10
    )


def add_reminder(text, reminder_time):
    schedule.every().day.at(reminder_time).do(show_notification, message=text)
    print(f"Напоминание добавлено на {reminder_time}: {text}")


if __name__ == "__main__":
    while True:
```

Внутри бесконечного цикла пользователю будет предложено ввести текст напоминания и время, в которое должно произойти напоминание. Далее будет идти вложенный бесконечный цикл, который ожидает выполнения напоминания.

```python
import schedule
import time
from plyer import notification


def show_notification(message):
    notification.notify(
        title="Напоминание",
        message=message,
        timeout=10
    )


def add_reminder(text, reminder_time):
    schedule.every().day.at(reminder_time).do(show_notification, message=text)
    print(f"Напоминание добавлено на {reminder_time}: {text}")


if __name__ == "__main__":
    while True:
        text = input("Введите текст напоминания: ")
        reminder_time = input("Введите время (формат ЧЧ:ММ): ")
        add_reminder(text, reminder_time)
        print("Ожидание напоминания...")

        while True:
            schedule.run_pending()
            time.sleep(1)
```