Python中的桌面通知器

Python中的桌面通知器

通知支持人们记住事情。它是一个小的文本片段,出现在桌面或移动屏幕上,通知用户有关更新或其他重要信息的。这些信息使用户能够专注于重要事件并忽视不太重要的事情。通知被存储在通知栏中,在完成工作后我们可以参考。

在以下教程中,我们将在几个简单的步骤中使用Python编程语言创建一个自定义的桌面通知器应用程序。

但在我们开始之前,让我们简单了解一下桌面通知器及其工作原理。

理解桌面通知器

桌面通知器是一个简单的应用程序,在桌面上以弹出消息的形式生成通知消息。今天我们将学习开发的桌面通知应用程序的主要目标是不断提醒我们在一天中需要完成的不同事情。

这个任务就像一个待办列表,我们有一系列需要完成的任务。桌面通知器将不断提醒我们在一天中需要完成的不同任务和操作。

现在,让我们看看“桌面通知器”项目的先决条件。

Python项目的先决条件

对于这个Python项目,我们需要安装两个必要的软件包。第一个软件包是“requests”,它将帮助我们从网络上获取数据;第二个软件包是“plyer”,它将允许我们在计算机上创建通知。

我们可以使用pip命令来安装这些软件包,只需在命令提示符或终端中输入以下命令。

语法:

# installing the requests package
pip install requests
# installing the plyer package pip install plyer

现在让我们通过构建一个简单的桌面通知 Python 来了解 plyer 的用途。

基于 Plyer 包的示例

在以下示例中,我们将借助 plyer 包创建一个简单的桌面通知。

示例:

from plyer import notification

notification_title = 'GREETINGS FROM JAVATPOINT!'
notification_message = 'Thank you for reading. Have a Good Day.'

notification.notify(
    title = notification_title,
    message = notification_message,
    app_icon = None,
    timeout = 10,
    toast = False
    )

输出:

Python中的桌面通知器

说明:

在上面的代码片段中,我们从plyer包中导入了notification对象。然后我们定义了两个字符串变量来存储桌面通知器的标题和消息的值。最后,我们使用notify()方法。在这个方法中,我们指定了像标题(title)代表通知的标题、消息(message)包含要显示的消息、应用程序图标(app_icon)包含与消息一起显示的图标、超时(timeout)包含要显示消息的时间(默认为10秒)、吐司(toast)包含表示简单消息而不是完整通知的布尔值等参数。

结果是,我们可以在桌面上看到一个弹出窗口,显示用户的标题和消息。

现在,让我们构建一个桌面通知器来设置COVID统计的每日跟踪。

Python实现桌面通知器

为了在Python中构建桌面通知器以每日跟踪COVID统计数据,我们将按照以下步骤进行:

步骤1: 安装所需的包

步骤2: 从网上读取冠状病毒数据

步骤3: 构建桌面通知应用程序

步骤4: 使程序在后台运行

由于我们在前面的部分已经涵盖了步骤1,我们将从读取与COVID统计数据相关的数据开始。所以,让我们进入项目。

从网上读取COVID统计数据

我们可以使用下面显示的URL获取与冠状病毒相关的数据,可以将国家名称替换为自己的国家名称。我们将使用印度的冠状病毒数据进行此应用程序。

https://corona-rest-api.herokuapp.com/Api/india/

网站将如下所示:

Python中的桌面通知器

构建桌面通知应用程序

我们已经准备好构建这个应用程序所需的所有工具,现在让我们开始编写这个应用程序的代码。

注意:如果我们在离线编译器中编写代码,将会更容易,因为在本教程的后期阶段,我们将使该应用程序在计算机上作为后台进程执行;如果我们在在线编译器中运行,则必须下载文件,这对于离线编译器来说是不必要的。建议使用任何离线编辑器或IDE,如Visual Studio Code(VS Code)。

导入所需的库和模块

我们将开始导入所需的库和模块,如 datetime、time、requestsplyer 。让我们考虑下面这段代码,演示相同的内容:

文件:notifier.py

# importing required modules and libraries
import datetime # to read present date
import time # to suspend the execution for a specific time
import requests # to retrieve COVID stats from web
from plyer import notification # to get notification on the computer

解释:

在以上代码段中,我们导入了 datetime 模块以读取当前日期。我们还导入了 time 模块以暂停执行一段时间。然后,我们导入了 requests 库以从网络中获取冠状病毒数据。最后,我们从 plyer library 导入了 notification 对象,它将帮助我们在计算机上收到通知。

从网络获取数据

我们现在将使用 requests 库从网络中检索数据。让我们考虑以下代码段,演示相同的功能:

文件:notifier.py

# initializing a variable with None (temporary)
# indicating that there is no data available currently
covidStats = None
try:
    covidStats = requests.get("https://corona-rest-api.herokuapp.com/Api/india")
except:
    # in case the data is not fetched due to lack of internet
    print("Consider Checking the internet connection")

解释:

在上述代码片段中,我们初始化了一个名为 covidStats 的变量,它将存储来自网络的冠状病毒数据。然而,我们最初将此变量设置为 None 。然后我们使用了 try-except 块。在 try 块中,我们使用了 requests 库的 get() 方法,指定了先前提到的网站的URL,并将数据存储在 covidStats 变量中。如果由于缺乏互联网而无法获取数据,则在 except 块中打印一条语句。

为项目创建自定义通知。

我们将使用从 plyer 库导入的 notification 对象的 notify() 方法为项目创建自定义通知。下面是相应代码的片段:

文件:notifier.py

# in case we fetched data
if (covidStats != None):
    # converting data into JSON format
    jsonData = covidStats.json()['Success']

    # repeating the loop for multiple times
    while(True):
        notification.notify(
            # defining the title of the notification,
            title = "COVID19 Stats on {}".format(datetime.date.today()),
            # defining the message of the notification
            message = "Total cases : {totalcases}\nToday cases : {todaycases}\nToday deaths : {todaydeaths}\nTotal active : {active}".format(
                        totalcases = jsonData['cases'],
                        todaycases = jsonData['todayCases'],
                        todaydeaths = jsonData['todayDeaths'],
                        active = jsonData["active"]),
            # creating icon for the notification
            # we have to download an icon of ico file format
            app_icon = "covidProtection.ico",
            # the notification stays for 30 seconds
            timeout  = 30
        )
        # sleep for 12 hrs => 60 * 60 * 12 seconds
        # notification repeats after every 12 hours
        time.sleep(60 * 60 * 12)

说明:

在上面的代码片段中,我们使用 if 条件语句来检查 covidStats 变量是否包含来自网络的一些数据。然后,我们使用 json() 方法将这些数据转换为JSON格式,并存储在一个新变量 jsonData 中。然后,我们使用 while() 循环来重复执行循环多次。在此循环中,我们使用 notification 对象的 notify() 方法创建了一个桌面通知器。我们在此方法中指定了通知的标题,然后是消息、图标和超时时间。我们在标题参数中打印当前日期,在消息参数中打印 jsonData 变量中的数据。我们为通知设置了一个图标,该图标在 .ico 文件格式中下载,并在 app_icon 参数中指定路径。然后,我们将超时时间设置为 30 秒,以便通知保持该时长。最后,我们使用 time 模块的 sleep() 方法,以便每 12 小时重复上述过程。

编码部分现在已完成,应用程序准备好运行。用户可以根据自己的偏好更改 timeoutsleep() 的值。此外,图标可以在以下位置找到:https://icon-icons.com/icon/Covid-Corona-Hygiene-Mask-Health-Protect-Doctor/140787。

我们现在可以保存文件并在命令 shell 或终端中运行以下命令:

语法:

$ python notifier.py

但是在我们看到输出之前,这是完整的项目代码。

完整的项目代码

以下程序文件是”桌面通知器”项目的完整代码。

文件:notifier.py

# importing required modules and libraries
import datetime # to read present date
import time # to suspend the execution for a specific time
import requests # to retrieve COVID stats from web
from plyer import notification # to get notification on the computer

# initializing a variable with None (temporary)
# indicating that there is no data available currently
covidStats = None
try:
    covidStats = requests.get("https://corona-rest-api.herokuapp.com/Api/india")
except:
    # in case the data is not fetched due to lack of internet
    print("Consider Checking the internet connection")

# in case we fetched data
if (covidStats != None):
    # converting data into JSON format
    jsonData = covidStats.json()['Success']

    # repeating the loop for multiple times
    while(True):
        notification.notify(
            # defining the title of the notification,
            title = "COVID19 Stats on {}".format(datetime.date.today()),
            # defining the message of the notification
            message = "Total cases : {totalcases}\nToday cases : {todaycases}\nToday deaths : {todaydeaths}\nTotal active : {active}".format(
                        totalcases = jsonData['cases'],
                        todaycases = jsonData['todayCases'],
                        todaydeaths = jsonData['todayDeaths'],
                        active = jsonData["active"]),
            # creating icon for the notification
            # we have to download a icon of ico file format
            app_icon = "covidProtection.ico",
            # the notification stays for 30 seconds
            timeout  = 30
        )
        # sleep for 12 hrs => 60 * 60 * 12 seconds
        # notification repeats after every 12 hours
        time.sleep(60 * 60 * 12)

输出:

Python中的桌面通知器

将应用程序在后台运行

所以,我们最终建立了Python应用程序,并且在执行程序时正常运行。然而,每次为了收到通知而执行应用程序不是一项繁琐的工作吗?

这里有一个解决方案,它可以让我们通过将应用程序作为后台进程在计算机系统中运行来自动化这个过程。

让Python应用程序在后台运行的方法

下面的命令将允许我们使应用程序在后台运行。请注意,如果他们使用的是Windows作为操作系统,就需要在命令提示符中输入此命令,在Linux操作系统中需要在终端中输入。

语法:

$ pythonw.exe .\

注意:您可以将替换为您的文件名。

现在让我们使用以下命令将上述桌面通知应用程序在后台运行。

语法(语法):

$ pythonw.exe .\notifier.py

因此,应用程序现在已经在后台运行。

如何确认应用程序是否在后台运行?

为了确认应用程序是否在后台运行,可以打开计算机系统的任务管理器,转到后台进程,看看Python是否在运行。

以下图片显示了相同的情况:

Python中的桌面通知器

如何停止收到桌面通知应用的通知?

为了停止收到通知,可以打开任务管理器,并搜索名为Python的后台进程。右键单击该进程,然后选择“结束任务”选项来终止进程。

其他可以使用这种方法的领域

我们可以在不同的领域中使用这种方法。以下是一些示例:

  1. 每天通知去健身房或者服用药物。
  2. 每小时通知休息或者喝水。
  3. 每月通知支付账单等等。

可以根据需求使用这个桌面通知应用。

结论

通过本教程,我们学习了如何使用Python编程语言中的 plyer 库构建一个简单的桌面通知应用程序。我们还学习了如何从网络中获取数据并在桌面通知应用程序中使用它。我们还了解了创建我们自己定制的桌面通知应用程序的方法。该应用程序适用于Windows、Linux或Mac等任何操作系统。最后,我们学习了如何使应用程序在后台运行。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程