2010-01-13 3 views
5

파이썬 GTK +에서 새로운 신호를 생성 할 수 있습니까?파이썬 GTK + : 커스텀 시그널을 만드시겠습니까?

해골 코드 예제를 알려주세요.

+0

감사합니다, 그것은 파산 내 이상한 이유로 밤새도록 붙들어 놓은 10k 장벽. –

+0

@ 에이덴 : 저의 기쁨 : 오늘 미안합니다. 미안합니다. (쿼터가 일찍 도달했습니다.) – jldupont

+0

나를 'k'영역으로 밀어 넣을 걱정은 없습니다. –

답변

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) 
+0

흠 ... 어떻게 내 인터넷 검색 중이 회의가 그리워 ... 고마워! – jldupont

+0

걱정 없음;) ... –

+0

즐거움은 내 것이 전부입니다. 귀하의 10K 장벽. 주위에 당신을보고. – jldupont

3

대답은 물론 정확,하지만 libraries를 사용하여 고통을 덜 경향이있다 : 수락에 대한

import gobject 

from pygtkhelpers.utils import gsignal 

class Car(gobject.GObject): 

    gsignal('engine-started', float) # yeah baby