2015-07-15 3 views
-1

У меня есть код python, который я пытаюсь преобразовать из Qt в Gtk. Я довольно новичок в Gtk и не имею опыта работы с Qt. В python есть несколько строк, которые создают новые сигналы в Qt, которые я хотел бы преобразовать в Gtk. Код выглядит следующим образом:Что такое эквивалент pyqtsignal в PyGObject?

fpssig = pyqtsignal(float) 

Впоследствии, есть подключение к функции обратного вызова. Извините, но у меня нет конкретного кода.

Как создать аналогичный сигнал в PyGtk, чтобы я мог испускать его, когда мне нужно?

Спасибо.

+3

[Сигналы и события в PyGTK] (http://zetcode.com/gui/pygtk/signals/) – ekhumoro

ответ

0

Ваши теги не очень ясны, если вы имеете в виду pygobject или pygtk.

Если вы имеете в виду pygobject см: https://python-gtk-3-tutorial.readthedocs.org/en/latest/objects.html#signals

+0

я имел в виду pygobject. Это становится путаным для кого-то нового для этого, когда я ищу в поисках ответа, а некоторые хиты относятся к pygobject и Gtk3, а другие хиты относятся к Gtk2. Я наконец узнал, как создавать сигналы, глядя на ссылку, которую вы отправили более внимательно. Я попытался установить атрибут __gsignals__, но после создания объекта. –

+0

Как только я наконец создал отдельный объект для своих сигналов (например, класс PipeSignals (GObject.GObject)), и я создал экземпляр этого, я мог бы испустить свой сигнал и подключить его к обратному вызову. –

0

Ну, я понял это. Спасибо за ответы. Я пытался переопределить
____gsignals___
атрибут в моем объекте Gst.Pipeline. Каждый раз, когда я пытался создать объект, он всегда возвращался к «{}». Я, наконец, создал отдельный класс только для сигналов.

class PipeSignals(GObject.Object): 
# create signals for this pipeline 
__gsignals__ = { 
       'updatedSourceFPS': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_FLOAT,)), 
       'updatedCaptureCount': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_INT,)), 
       'updatedCaptureTime':(GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_FLOAT,)), 
       'captureFinished': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE,()), 
       'pipelineError': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_STRING,)) 
       } 
def __init__(self): 
    GObject.Object.__init__(self) 

Когда я создаю свой объект Pipeline, я создаю объект сигналы:

 self.pipesignals = PipeSignals() 

подключить к одному из них:

  self.pipeline.pipesignals.connect('updatedSourceFPS', self.on_fps_update) 

и излучают сигнал, когда придет время :

    self.pipesignals.emit('updatedSourceFPS', fps) 

И я обновляю моя строка состояния в on_fps_update().

def on_fps_update(self, signal, fps): 
    self.statusbar.pop(self.statusid) 
    self.statusbar.push(self.statusid, 'fps: {:.3f}'.format(fps)) 
    return