Как отправить текстовые сообщения на пузыри уведомлений?

Я написал код Python для получения случайного текста в файл.txt. Теперь я хочу отправить этот случайный текст в область уведомлений с помощью команды notify-send. Как мы это делаем?

7 ответов

Решение

Мы всегда можем вызвать notify-send как подпроцесс, например, так:

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

import subprocess

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

В качестве альтернативы мы могли бы также установить python-notify и вызвать уведомление через это:

import pynotify

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

Обратите внимание, что в Ubuntu нет пакета python3-notify. Если вы используете Python 3, вам нужно использовать python3-notify2. API для notify2 такой же: просто замените pynotify с notify2,

python3

Пока вы можете позвонить notify-send с помощью os.system или же subprocess возможно, более совместимо с программированием на основе GTK3 использование класса notify gobject-introspection.

Небольшой пример покажет это в действии:

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")

Чтобы ответить на вопрос Мехула Мохана, а также предложить кратчайший способ отправить уведомление с разделами заголовка и сообщения:

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

Включение этого в функцию может быть немного запутанным из-за кавычек в кавычках

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

Вы должны использовать пакет notify2, это замена для python-notify. Используйте это как следует.

pip install notify2

И код:

import notify2
notify2.init('app name')
n = notify2.Notification('title', 'message')
n.show()
import os
mstr='Hello'
os.system('notify-send '+mstr)

Для тех, кто смотрит на это в +2018, я могу порекомендовать пакет notify2.

Это чистая замена python для notify-python, использующая python-dbus для прямой связи с сервером уведомлений. Он совместим с Python 2 и 3, а его обратные вызовы могут работать с приложениями Gtk 3 или Qt 4.

PyNotify2, предложенный многими ответами, считает себя устаревшим с конца 2020 года:

notify2 — это или был пакет для отображения уведомлений на рабочем столе в Linux. Это маленькие пузырьки, которые сообщают пользователю, например, о новых электронных письмах.

notify2 устарел. Вот несколько альтернатив:

  • — это более новый модуль, делающий по сути то же самое.
  • Если вы пишете приложение GTK, вы можете использовать GNotification ( intro , ).
  • Для простых случаев вы можете запустить как подпроцесс. Пакет предоставляет для этого простой Python API, а также может отображать уведомления в Windows.

Итак, учитывая приведенные выше предложения:

  • The notify-sendПодход подпроцесса уже объяснен в других ответах, и py-notifierpy-notifier может упростить его, с дополнительным бонусом работы на платформах Windows с использованием win10toast, но также со всеми недостатками вызова подпроцесса под капотом:
      from pynotifier import Notification

Notification(
    title='Notification Title',
    description='Notification Description',
    icon_path='path/to/image/file/icon.png',
    duration=5,
    urgency=Notification.URGENCY_CRITICAL
).send()
  • desktop_notifydesktop_notify , похоже, напрямую использует DBus, как и PyNotify2, и имеет dbus-nextкак его единственная зависимость.
      notify = desktop_notify.aio.Notify('summary', 'body')
await notify.show()
  • Ответ fossfreedom охватывает GTK giмаршрут интроспекции. Но обратите внимание, что он использует другой API, отличный от упомянутого выше:
    • Есть Python APIGio.NotificationAPI, начиная с Gio 2.4 и далее, упомянутый pynotify2
    • И есть NotifyAPI, начиная с GLib 2.0, используется во фрагменте кода @fossfreedom.
Другие вопросы по тегам