Как мне создать новый сигнал в pygtk - PullRequest
7 голосов
/ 16 сентября 2008

Я создал объект python, но я хочу посылать на него сигналы. Я сделал его наследником от gobject.GObject, но, похоже, нет никакого способа создать новый сигнал для моего объекта.

Ответы [ 3 ]

11 голосов
/ 16 сентября 2008

Вы также можете определить сигналы внутри определения класса:

class MyGObjectClass(gobject.GObject):
    __gsignals__ = {
      "some-signal": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (object, )),
    }

Содержимое кортежа совпадает с тремя последними аргументами gobject.signal_new.

4 голосов
/ 16 сентября 2008

Вот как:

import gobject

class MyGObjectClass(gobject.GObject):
    ...

gobject.signal_new("signal-name", MyGObjectClass, gobject.SIGNAL_RUN_FIRST,
    None, (str, int))

Где второй-последний аргумент - это тип возвращаемого значения, а последний аргумент - кортеж типов аргументов.

2 голосов
/ 24 сентября 2008

Если вы используете киви здесь , вы можете просто сделать:

from kiwi.utils import gsignal

class MyObject(gobject.GObject):
    gsignal('signal-name')
...