Я пытаюсь написать программу с pynotify, привязками Python для libnotify.Я хочу вызвать критическое уведомление в какой-то момент и обновлять его каждые несколько секунд по мере изменения информации, пока пользователь не щелкнет его.Это все работает, за исключением обработки того, что происходит, когда пользователь отклоняет его.
Чтобы обновить уведомление, мне нужно позвонить Notification.show
после Notification.update
.Это нормально, но это означает, что мне нужно отслеживать, отклонил ли пользователь уведомление, в противном случае оно будет просто появляться снова.
Это должно быть возможно двумя способами, которые я могу придумать:
- Определение, является ли уведомление видимым или нет.Я не нашел никакого способа выяснить это.
- Сохранение некоторой переменной при закрытии уведомления, затем проверка ее перед обновлением и повторный вызов
Notification.show
.
Эта секундаметод должен быть возможным.Пример кода, который я обнаружил (похоже, нет никакой надлежащей документации для pynotify), заставил меня позвонить Notification.connect
, чтобы подключить сигнал "closed"
к обратному вызову.Я пытался сделать это, но обратный вызов так и не был запущен.
Я долго гуглял и отлаживал, но не мог добиться прогресса.В конце концов я нашел несколько примеров скриптов, которые поставляются с pynotify.Один из них прикрепляет обработчик к сигналу "closed"
: test-xy-stress.py
Его содержимое выглядит следующим образом:
#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gobject
import gtk
import gtk.gdk
import pynotify
import sys
import random
exposed_signal_id = 0
count = 0
def handle_closed(n):
print "Closing."
def emit_notification(x, y):
n = pynotify.Notification("X, Y Test",
"This notification should point to %d, %d." % (x, y))
n.set_hint("x", x)
n.set_hint("y", y)
n.connect('closed', handle_closed)
n.show()
def popup_random_bubble():
display = gtk.gdk.display_get_default()
screen = display.get_default_screen()
screen_x2 = screen.get_width() - 1
screen_y2 = screen.get_height() - 1
x = random.randint(0, screen_x2)
y = random.randint(0, screen_y2)
emit_notification(x, y)
return True
if __name__ == '__main__':
if not pynotify.init("XY Stress"):
sys.exit(1)
gobject.timeout_add(1000, popup_random_bubble)
gtk.main()
Я запустил это и обнаружил, что обратные вызовы здесьникогда не запускайте.
Может ли это быть только моей системой, или есть ошибка в pynotify или libnotify где-нибудь?Если сейчас это что-то непоправимое, как насчет варианта 1 выше - есть ли способ сделать это?
Кажется, у меня есть libnotify 0.4.5 и pynotify 0.1.1.