Metin mesajlarını bildirim balonlarına nasıl gönderirim?


38

Bir .txt dosyasına rastgele metin almak için bir python kodu yazdım. Şimdi bu rastgele metni 'notify-send' komutu ile bildirim alanına göndermek istiyorum. Bunu nasıl yaparız?

Yanıtlar:


63

Notify- send'i her zaman bir alt işlem olarak çağırabiliriz , örneğin:

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

import subprocess

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

Alternatif olarak python-notify'ı yükleyebilir ve bildirimi şu şekilde çağırırız:

import pynotify

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

Ubuntu'da python3-notify paketi bulunmadığını unutmayın. Python 3 kullanıyorsanız, python3-notify2 kullanmanız gerekir . Sadece değiştirin: Notify2 API aynıdır pynotifyile notify2.


1
subprocess.Popen(['notify-send', message])İlk örneği işe almak için kullanmak zorunda kaldım .
lgarzo

İkincisi a pynotify.init("Test")ve pynotify.Notification(title, message).show(). Bu arada
Py

Bunun için çok üzgünüm. Bunu daha önce işteki kutumda test edememiştim - benim hatam. Kayıp bitler düzenlendi.
Takkat

10

python3

Arayabileceğin iken notify-sendaracılığıyla os.systemya subprocessda haberdar kullanmak GTK3 tabanlı programlama ile tartışmasız daha tutarlıdır gobject-içgözlem sınıfını.

Küçük bir örnek bu eylemde gösterecektir:

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 programlama ile sadece daha tutarlı değil, aynı zamanda tek bir süreç var: devam eden bir çatal-yürütücü yok, bu yüzden sadece bir bildirim balonu göndermek için yeni bir süreç oluşturmak için kaynak israfı yok, artı Popen()komutu çalıştırmak için kabuk arayacak, bu yüzden Kabuk işlemi de ortaya çıkıyor.
Sergiy Kolodyazhnyy

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

Bu bildirimi nasıl özelleştirebilirim? Başlık, bildirimdeki görüntü vb.
mehulmpt

1
Bu sürüm keyfi komut çalıştırma için savunmasızdır.
Steve

5

Mehul Mohan sorusuna cevap vermek ve aynı zamanda başlık ve mesaj bölümleriyle bir bildirimde bulunmak için en kısa yolu önermek için:

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

Bunu işlevine koymak, tırnak işaretleri içindeki tırnaklar nedeniyle biraz kafa karıştırıcı olabilir.

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

4
Bu yayına bir düzenleme
muru

2
'notify-send "{}" "{}"'.format(title, message)Dizeleri eklemek yerine kullanmaktan ne haber ?
Stam Kaly

4

+2018'de buna bakan herkes için notify2 paketini önerebilirim .

Bu, doğrudan bildirim sunucusuyla iletişim kurmak için python-dbus kullanan, notify-python için saf bir python yedeğidir. Python 2 ve 3 ile uyumludur ve geri aramaları Gtk 3 veya Qt 4 uygulamalarıyla çalışabilir.


3

Notify2 paketini kullanmalısınız, bu python-notify'ın yerine geçer. Takip edildiği gibi kullanın.

pip install notify2

Ve kod:

import notify2
notify2.init('app name')
n = notify2.Notification('title', 'message')
n.show()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.