Как отправить текстовые сообщения на пузыри уведомлений?
Я написал код 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()
Для тех, кто смотрит на это в +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 API
Gio.Notification
API, начиная с Gio 2.4 и далее, упомянутыйpynotify2
- И есть
Notify
API, начиная с GLib 2.0, используется во фрагменте кода @fossfreedom.
- Есть Python API