Làm cách nào để gửi tin nhắn văn bản đến bong bóng thông báo?


38

Tôi đã viết một mã python để nhận văn bản ngẫu nhiên vào một tệp .txt. Bây giờ tôi muốn gửi văn bản ngẫu nhiên này vào khu vực thông báo thông qua lệnh 'notify-send'. làm sao chúng ta làm việc đó bây giờ?

Câu trả lời:


63

Chúng ta luôn có thể gọi thông báo-gửi dưới dạng một quy trình con, ví dụ như thế:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import subprocess

def sendmessage(message):
    subprocess.Popen(['notify-send', message])
    return

Ngoài ra, chúng tôi cũng có thể cài đặt thông báo python và gọi thông báo qua đó:

import pynotify

def sendmessage(title, message):
    pynotify.init("Test")
    notice = pynotify.Notification(title, message)
    notice.show()
    return

Lưu ý rằng không có gói thông báo python3 có sẵn trong Ubuntu. Nếu bạn đang sử dụng Python 3, bạn sẽ cần sử dụng python3-notify2 . API cho notify2 giống nhau: chỉ cần thay thế pynotifybằng notify2.


1
Tôi đã phải sử dụng subprocess.Popen(['notify-send', message])để làm cho ví dụ đầu tiên làm việc.
lgarzo

Cái thứ hai a pynotify.init("Test")pynotify.Notification(title, message).show(). Nhân tiện, tôi đang học Python Con đường khó khăn, vì vậy tôi có thể bỏ qua điều gì đó ...
lgarzo

Rất xin lỗi vì điều đó. Tôi đã không thể kiểm tra điều này sớm hơn trên hộp của tôi tại nơi làm việc - xấu của tôi. Chỉnh sửa các bit bị thiếu trong.
Takkat

10

trăn3

Trong khi bạn có thể gọi notify-sendqua os.systemhoặc subprocessnó được cho là phù hợp hơn với lập trình dựa trên GTK3 để sử dụng lớp intropection Notify .

Một ví dụ nhỏ sẽ cho thấy điều này trong hành động:

from gi.repository import GObject
from gi.repository import Notify

class MyClass(GObject.Object):
    def __init__(self):

        super(MyClass, self).__init__()
        # lets initialise with the application name
        Notify.init("myapp_name")

    def send_notification(self, title, text, file_path_to_icon=""):

        n = Notify.Notification.new(title, text, file_path_to_icon)
        n.show()

my = MyClass()
my.send_notification("this is a title", "this is some text")

Không chỉ phù hợp hơn với lập trình Gtk, mà còn là một quy trình duy nhất: không có trình xử lý rẽ nhánh nào diễn ra, vì vậy không lãng phí tài nguyên khi sinh ra quy trình mới chỉ để gửi bong bóng thông báo, cộng với Popen()sẽ gọi shell để chạy lệnh, vì vậy, có quá trình vỏ bật lên quá.
Sergiy Kolodyazhnyy

6
import os
mstr='Hello'
os.system('notify-send '+mstr)

Làm cách nào để tùy chỉnh thông báo này? Giống như tiêu đề, hình ảnh trong thông báo, vv?
mehulmpt

1
Phiên bản này dễ bị thực thi lệnh tùy ý.
Steve

5

Để trả lời câu hỏi Mehul Mohan cũng như đề xuất cách ngắn nhất để đưa ra thông báo với phần tiêu đề và thông báo:

import os
os.system('notify-send "TITLE" "MESSAGE"')

Đặt chức năng này vào chức năng có thể hơi khó hiểu do dấu ngoặc kép trong dấu ngoặc kép

import os
def message(title, message):
  os.system('notify-send "'+title+'" "'+message+'"')

4
Bạn có thể đề nghị chỉnh sửa bài viết đó.
muru

2
Điều gì về việc sử dụng 'notify-send "{}" "{}"'.format(title, message)chứ không phải thêm chuỗi?
Stam Kaly

4

Đối với bất cứ ai nhìn vào điều này trong +2018, tôi có thể đề xuất gói notify2 .

Đây là một thay thế python thuần cho python thông báo, sử dụng python-dbus để liên lạc trực tiếp với máy chủ thông báo. Nó tương thích với Python 2 và 3 và các cuộc gọi lại của nó có thể hoạt động với các ứng dụng Gtk 3 hoặc Qt 4.


3

Bạn nên sử dụng gói notify2, nó là sự thay thế cho python-notify. Sử dụng nó như sau.

pip install notify2

Và mã:

import notify2
notify2.init('app name')
n = notify2.Notification('title', 'message')
n.show()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.