2016-11-21 3 views
0

Я хотел бы добавить действие к моему Notification с обратным вызовом. Я использую pygobject со следующим кодом:Callback not called in 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.

ответ

2

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

from gi.repository import Gtk 
Gtk.main() 

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

Смежные вопросы