Python GTK +: создать пользовательские сигналы?

Действительно ли возможно создать новые сигналы в Python GTK +?

Я хотел бы скелетный пример кода.

6
задан jldupont 13 January 2010 в 15:40
поделиться

2 ответа

Выдержка:

Создание собственных сигналов

Другое, что вы, вероятно, хотите Используйте, когда подклассный Gobject определяется Пользовательские сигналы. Вы можете создать свой собственные сигналы, которые могут быть изданы так Пользователи вашего класса могут подключиться к их.

Когда сигнал излучается набор замыкание будет выполнено. Закрытие это абстракция обратного вызова концепция. Закрытие - обратный вызов сам (указатель функции), пользователь данные (это будет последний параметр для обратный вызов) и другая функция для проблемы очистки, которые не будут обсуждается в этом документе.

Ради этой статьи вы не действительно нужно знать разницу между обратным вызовом и закрытием так оба термины будут использоваться. Но быть посоветовал, что это не совсем правильный.

Как мы уже говорили, когда сигнал излучается, набор закрытий будет выполнено. Один из них такой же один Для всех случаев этого класса И, следовательно, его название: класс закрытия, а другие являются пользовательским пользователем обратные вызовы. Обратите внимание, что не все сигналы должны иметь класс закрытия Потому что это необязательно.

из, http://www.pygtk.org/articles/subclassing-gobject/sub-classing-gobject-in-wython.htm , надеюсь, что помогает. Есть пример кода на сайте и здесь , фрагмент:

import pygtk
pygtk.require('2.0')
import gobject

class Car(gobject.GObject):
    __gproperties__ = {
        'fuel' : (gobject.TYPE_FLOAT, 'fuel of the car',
                  'amount of fuel that remains in the tank',
                  0, 60, 50, gobject.PARAM_READWRITE)
        }

    __gsignals__ = {
        'engine-started' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
                            (gobject.TYPE_FLOAT,))
        }

    def __init__(self):
        gobject.GObject.__init__(self)
        self.fuel = 50

    def do_get_property(self, property):
        if property.name == 'fuel':
            return self.fuel
        else:
            raise AttributeError, 'unknown property %s' % property.name

    def do_set_property(self, property, value):
        if property.name == 'fuel':
            self.fuel = value
        else:
            raise AttributeError, 'unknown property %s' % property.name

    def do_engine_started(self, remaining_fuel):
        print '***** Beginning of class closure *****'
        print 'The engine is ready and we still have %f of fuel' % self.fuel
        print '***** End of class closure *****'

    def start(self):
        self.emit('engine-started', self.get_property('fuel'))

gobject.type_register(Car)
6
ответ дан 10 December 2019 в 02:48
поделиться

Ответы верны конечно, но с использованием библиотек менее склонны к болям:

import gobject

from pygtkhelpers.utils import gsignal

class Car(gobject.GObject):

    gsignal('engine-started', float) # yeah baby
3
ответ дан 10 December 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: