Обратный вызов не вызывается в действии уведомления Pygobject

Я хотел бы добавить действие к моему Notification с обратным вызовом. Я использую pygobject со следующим кодом:

import logging
from time import sleep

import gi
gi.require_version('Notify', '0.7')
from gi.repository import Notify

def callback(*args, **kwargs):
    print("Got callback")
    print(locals())


def main():
    Notify.init("Hello World")
    notification = Notify.Notification.new("Testing")
    notification.add_action("my action", "Submit", callback)
    notification.show()
    sleep(5)

if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG)
    main()

Когда я запускаю скрипт, я вижу уведомление с кнопкой "Отправить", но когда я нажимаю кнопку, обратный вызов не запускается (насколько я могу судить).

Когда я использую ipython для проверки вещей, я получаю эту помощь для add_action:

In [65]: Notify.Notification.add_action?
Type:        FunctionInfo
String form: gi.FunctionInfo(add_action)
File:        /usr/lib/python3.5/site-packages/gi/__init__.py
Docstring:   add_action(self, action:str, label:str, callback:Notify.ActionCallback, user_data=None)

Итак, я вижу, что обратный вызов должен быть ActionCallback? Затем я проверяю этот класс:

In [67]: Notify.ActionCallback
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-67-aa40d4997598> in <module>()
----> 1 Notify.ActionCallback

/usr/lib/python3.5/site-packages/gi/module.py in __getattr__(self, name)
    231             wrapper = info.get_value()
    232         else:
--> 233             raise NotImplementedError(info)
    234
    235         # Cache the newly created wrapper which will then be

NotImplementedError: gi.CallbackInfo(ActionCallback)

... и я получаю NotImplementedError, Значит, действия по уведомлению просто не реализованы в PyGObject? Или я делаю что-то не так, передавая свой обратный вызов add_action метод?

Я на Arch Linux, используя пакет python-gobject 3.22.0-1, работает с python 3.5.2.

1 ответ

Решение

Оказывается, мне нужно было запустить основной цикл Gtk:

from gi.repository import Gtk
Gtk.main()

Тогда обратный вызов был вызван просто отлично

Другие вопросы по тегам