5
A
답변
6
발췌 : 자신의 신호
G 객체가 사용자 정의 신호를 정의하는 것입니다 서브 클래스 때 당신은 아마 사용하려는 다른 것은 만들기
. 자신의 신호를 만들어 낼 수 있으므로 사용자가 에 연결할 수 있습니다.
신호가 방출되면 클로저 집합이 실행됩니다. 클로저 은 콜백 개념의 추상화입니다. 폐쇄는 콜백 그 자체 (함수 포인터), 사용자 데이터 (콜백 콜백의 마지막 매개 변수) 및 클린업 문제에 대한 또 다른 함수입니다 (이 문서에서는 이 아님). 이 문서를 위해서
당신이하지 이 정말 그렇게 두 용어가 사용되는 콜백과 폐쇄의 차이 을 알 필요가 않습니다. 그러나 은 이것이 완전히 이 아님을 알려야합니다.
앞서 말했듯이 신호가 일 때 이 실행됩니다. 그 중 하나는 이며이 클래스의 모든 인스턴스에 대해 이며 그 이름은 클래스 닫음 이고 다른 것은 사용자 정의 사용자 콜백입니다. 신호는 선택 사항이므로 클래스 닫음 이 필요하지 않습니다.
From, http://www.pygtk.org/articles/subclassing-gobject/sub-classing-gobject-in-python.htm, 희망이 도움이됩니다. 이 사이트 및 here, 코드 조각에 대한 예제 코드입니다 :
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)
3
대답은 물론 정확,하지만 libraries를 사용하여 고통을 덜 경향이있다 : 수락에 대한
import gobject
from pygtkhelpers.utils import gsignal
class Car(gobject.GObject):
gsignal('engine-started', float) # yeah baby
감사합니다, 그것은 파산 내 이상한 이유로 밤새도록 붙들어 놓은 10k 장벽. –
@ 에이덴 : 저의 기쁨 : 오늘 미안합니다. 미안합니다. (쿼터가 일찍 도달했습니다.) – jldupont
나를 'k'영역으로 밀어 넣을 걱정은 없습니다. –