如何将短信发送到通知气泡?


Answers:


63

我们总是可以将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。notify2的API相同:只需替换pynotify为即可notify2


1
我不得不使用subprocess.Popen(['notify-send', message])第一个示例。
lgarzo

第二个pynotify.init("Test")pynotify.Notification(title, message).show()。顺便说一下,我是“学习Python的艰辛之路”,所以我可能会忽略一些东西……
lgarzo 2012年

非常抱歉。我无法在工作中的盒子上对此进行测试,这很糟糕。在编辑的失位。
Takkat

10

python3

虽然您可以notify-send通过调用,os.system或者subprocess使用Notify gobject-introspection类可以说与基于GTK3的编程更加一致。

一个小例子将展示这一点:

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

不仅与Gtk编程更加一致,而且它是一个过程:没有fork-exec正在进行,因此在产生新进程只是为了发送通知气泡时不会浪费资源,而且Popen()还会调用shell来运行命令,因此Shell进程也会弹出。
Sergiy Kolodyazhnyy


5

要回答Mehul Mohan问题并提出最简单的方式来推送带有标题和消息部分的通知:

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

由于引号中的引号,将其置于函数中可能会有些混乱

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


2
使用'notify-send "{}" "{}"'.format(title, message)而不是添加字符串呢?
斯坦·凯利'01

4

对于在+2018中查看此内容的任何人,我都可以推荐notify2软件包。

这是notify-python的纯python替代品,它使用python-dbus直接与通知服务器通信。它与Python 2和3兼容,并且其回调可以与Gtk 3或Qt 4应用程序一起使用。


3

您应该使用notify2包,它是python-notify的替代品。如下使用它。

pip install notify2

和代码:

import notify2
notify2.init('app name')
n = notify2.Notification('title', 'message')
n.show()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.