Ứng dụng thông báo máy tính để bàn trong python

Thật tuyệt khi phát triển một ứng dụng nhắc nhở bạn về các kế hoạch của mình như báo thức hoặc danh sách việc cần làm. Trong bài viết này, tôi sẽ hướng dẫn bạn cách viết chương trình nhận thông báo trên màn hình bằng Python

Ứng dụng thông báo trên màn hình hoạt động như thế nào?

Mục đích chính của ứng dụng thông báo trên màn hình mà bạn sẽ học cách phát triển hôm nay là liên tục nhắc nhở chúng ta về những việc khác nhau mà chúng ta cần hoàn thành trong ngày.  

Ngoài ra, hãy đọc - Hơn 100 dự án học máy đã được giải quyết và giải thích

Nhiệm vụ này tương tự như danh sách việc cần làm, trong đó chúng tôi có một bộ mục tiêu cần đạt được. Và ứng dụng thông báo trên màn hình sẽ liên tục thông báo cho chúng tôi về những việc cần làm và hành động khác nhau cần thực hiện trong suốt cả ngày

Thông báo trên màn hình với Python

Tôi sẽ tạo một ứng dụng thông báo trên màn hình để nhận lời nhắc nghỉ ngơi sau mỗi giờ. Tin nhắn và cảnh báo của bạn hoàn toàn có thể là bất cứ thứ gì bạn muốn. Bạn có thể có một danh sách những việc cần làm trong ngày, tuần hoặc tháng và ứng dụng nhắc nhở sẽ liên tục nhắc bạn về những việc tương tự.

Đối với tác vụ này, bạn cần cài đặt thư viện Python được gọi là Plyer, thư viện này được sử dụng để truy cập các thành phần phần cứng trong hệ thống của bạn. Thư viện này có thể dễ dàng cài đặt bằng cách sử dụng lệnh pip;

Bây giờ hãy xem cách viết chương trình Python để nhận thông báo trên màn hình

import time
from plyer import notification

if __name__ == "__main__":
    while True:
        notification.notify(
            title = "ALERT!!!",
            message = "Take a break! It has been an hour!",
            timeout = 10
        )
        time.sleep(3600)

Sau khi chạy mã, bạn sẽ liên tục nhận được thông báo mỗi giờ hoặc cho đến thời gian bạn đặt do vòng lặp while được xác định trong mã. Hy vọng bạn thích bài viết này về cách nhận thông báo trên màn hình bằng Python. Xin vui lòng đặt câu hỏi có giá trị của bạn trong phần ý kiến ​​​​dưới đây

Trong bài Blog này, chúng ta sẽ tìm hiểu cách gửi thông báo Desktop. Chúng ta sẽ thấy việc triển khai trong Python

Ứng dụng thông báo máy tính để bàn trong python

Đặc trưng

Nơi được hỗ trợ bởi các API nền tảng gốc

  • Thông báo có thể nhấp
  • Nhiều nút hành động
  • Một trường trả lời duy nhất (e. g. , cho thông báo trò chuyện)
  • Tích hợp Asyncio. API chính bao gồm các phương thức không đồng bộ và cần có một vòng lặp sự kiện đang chạy để phản hồi các tương tác của người dùng bằng một thông báo
  • âm thanh thông báo
  • chủ đề thông báo (e. g. , cho các cuộc hội thoại khác nhau)
  • Giới hạn số lượng thông báo tối đa được hiển thị trong trung tâm thông báo
  • Chỉ phụ thuộc Python thuần túy, không có mô-đun mở rộng

Cài đặt

Từ PyPI

pip3 install -U desktop-notifier

Cách sử dụng

API chính bao gồm các phương thức không đồng bộ cần được chờ đợi. Việc sử dụng cơ bản chỉ yêu cầu người dùng chỉ định tiêu đề thông báo và tin nhắn. Ví dụ

import asyncio
from desktop_notifier import DesktopNotifier

notifier = DesktopNotifier()

async def main():
    n = await notifier.send(title="Hello world!", message="Sent from Python")
    
    await asyncio.sleep(5)  # wait a bit before clearing notification

    await notifier.clear(n)  # removes the notification
    await notifier.clear_all()  # removes all notifications for this app

asyncio.run(main())

Để thuận tiện, đây cũng là một phương thức đồng bộ send_sync() để gửi thông báo không yêu cầu vòng lặp asyncio đang chạy

notifier.send_sync(title="Hello world!", message="Sent from Python")

Theo mặc định, "Python" sẽ được sử dụng làm tên ứng dụng cho tất cả các thông báo, nhưng bạn có thể chỉ định tên ứng dụng và biểu tượng theo cách thủ công trong hàm tạo DesktopNotifier. Sử dụng nâng cao cũng cho phép thiết lập các tùy chọn thông báo khác nhau như khẩn cấp, nút, gọi lại, v.v. Đoạn mã sau sẽ tạo thông báo hiển thị trong gif ở đầu trang

import asyncio
from desktop_notifier import DesktopNotifier, Urgency, Button, ReplyField

notifier = DesktopNotifier()

async def main():
  await notifier.send(
      title="Julius Caesar",
      message="Et tu, Brute?",
      urgency=Urgency.Critical,
      buttons=[
        Button(
          title="Mark as read",
          on_pressed=lambda: print("Marked as read")),
      ],
      reply_field=ReplyField(
        title="Reply",
        button_title="Send",
        on_replied=lambda text: print("Brutus replied:", text),
      ),
      on_clicked=lambda: print("Notification clicked"),
      on_dismissed=lambda: print("Notification dismissed"),
      sound=True,
  )
  

loop = asyncio.get_event_loop()
loop.create_task(main())
loop.run_forever()

Lưu ý rằng một số nền tảng có thể không hỗ trợ tất cả các tùy chọn. Chẳng hạn, một số môi trường máy tính để bàn Linux có thể không hỗ trợ thông báo bằng các nút. macOS không hỗ trợ đặt biểu tượng hoặc tên ứng dụng theo cách thủ công. Thay vào đó, cả hai luôn được xác định bởi ứng dụng sử dụng Thư viện. Đây có thể là chính Python khi được sử dụng tương tác hoặc gói ứng dụng bị đóng băng khi được đóng gói bằng PyInstaller hoặc các giải pháp tương tự. Vui lòng tham khảo chương Hỗ trợ nền tảng của tài liệu để biết thêm thông tin về các giới hạn đối với một số nền tảng nhất định

Bất kỳ tùy chọn hoặc cấu hình nào không được nền tảng hỗ trợ sẽ bị bỏ qua một cách âm thầm. Vui lòng tham khảo tài liệu về Đọc tài liệu để biết thêm thông tin về hỗ trợ nền tảng

Tích hợp vòng lặp sự kiện

Rất khuyến khích sử dụng API không đồng bộ để ngăn nhiều mili giây chặn IO từ API DBus hoặc Cocoa. Ngoài ra, việc thực thi các cuộc gọi lại yêu cầu một vòng lặp sự kiện đang chạy. Trên Linux, vòng lặp sự kiện asyncio là đủ nhưng macOS yêu cầu CFRunLoop đang chạy

Bạn có thể sử dụng rubicon-objc để tích hợp Core Foundation CFRunLoop với asyncio

import asyncio
from rubicon.objc.eventloop import EventLoopPolicy

# Install the event loop policy
asyncio.set_event_loop_policy(EventLoopPolicy())

# Get an event loop, and run it!
loop = asyncio.get_event_loop()
loop.run_forever()

Bản thân trình thông báo máy tính để bàn sử dụng Rubicon Objective-C để giao tiếp với API ca cao, do đó bạn sẽ không thêm phụ thuộc mới. Một ví dụ đầy đủ tích hợp với CFRunLoop được đưa ra trong ví dụ/eventloop. py. Vui lòng tham khảo tài liệu Rubicon Objective-C để biết thêm thông tin

Tương tự, bạn có thể tích hợp vòng lặp sự kiện asyncio với vòng lặp chính Gtk trên Gnome bằng gbulb. Điều này không bắt buộc đối với chức năng đầy đủ nhưng có thể thuận tiện khi phát triển ứng dụng Gtk

Ghi chú trên macOS

Trên macOS 10. 14 trở lên, việc triển khai sử dụng

1. Desktop Notification Introduction
2. What is Plyer?
3. Create a Desktop Notifier
0 thay vì
1. Desktop Notification Introduction
2. What is Plyer?
3. Create a Desktop Notifier
1 không dùng nữa.
1. Desktop Notification Introduction
2. What is Plyer?
3. Create a Desktop Notifier
0 chỉ cho phép các tệp thực thi đã ký gửi thông báo trên màn hình. Điều này có nghĩa là các thông báo sẽ chỉ hoạt động nếu ứng dụng đi kèm hoặc thực thi Python đã được ký. Lưu ý rằng trình cài đặt từ python. org cung cấp một khung Python được ký hợp lệ nhưng homebrew thì không (ký thủ công tệp thực thi được cài đặt bởi homebrew cũng sẽ hoạt động)

Nếu bạn đóng băng mã của mình bằng PyInstaller hoặc giải pháp đóng gói tương tự, thì bạn phải ký vào gói ứng dụng kết quả để thông báo hoạt động. Chữ ký đặc biệt là đủ nhưng việc ký bằng chứng chỉ nhà phát triển Apple được khuyến nghị để phân phối và có thể được yêu cầu trên các bản phát hành macOS trong tương lai