2010-01-13 17 views
5

Python GTK + 'da yeni sinyaller oluşturmak mümkün mü?Python GTK +: özel sinyaller oluşturulsun mu?

Bir iskelet kodu örneği istiyorum, lütfen.

+0

teşekkür, o kırdı benim Bütün gece tuhaf bir sebepten dolayı 10 bin bariyer. –

+0

@Aiden: Benim için zevk: Üzgünüm bugün kaldı (şimdi kota erken ulaştı) upvotes yok. – jldupont

+0

Merak etme, beni 'k' bölgesine zorladığım için teşekkürler! –

cevap

6

bir alıntı: Kendi sinyalleri

GObject özel sinyallerini tanımlamak olduğu sınıflara, muhtemelen kullanım istediğiniz başka bir şey oluşturma

. kendi sinyallerinizi oluşturabilir, böylece sınıfınızın kullanıcıları 'a bağlanabilir.

Bir sinyal verdiğinde, kapatma seti çalıştırılır. Bir kapanış , geri arama konseptinin bir özetidir. Bir kapanma, kendisinin (bir işlev işaretçisi), kullanıcı veri ( geri arama için son parametresi olacak) ve temizleme sorunları için başka bir işlevdir, bu belgede belirtilmez. Bu maddenin uğruna

değil gerçekten çok hem terimler kullanılacak bir geri arama ve bir kapatma arasındaki farkı bilmek gerekiyor. Ancak, numaralı telefonun tamamen numaralı telefonun doğru olmadığını bildirmesi gerekir.

Daha önce de söylediğimiz gibi, bir sinyal yayıldığında, bir dizi kapanma yürütülecektir. Bunlardan biri, bu sınıfın tüm örnekleri için ve aynı zamanda onun adı: ve diğerlerinin özel kullanıcı geri çağrıları için aynı bir 'dur. Opsiyonel olduğu için, sinyallerinin hiçbirinin sınıf kapanmasına sahip olmaması gerektiğini unutmayın.

http://www.pygtk.org/articles/subclassing-gobject/sub-classing-gobject-in-python.htm'dan, umarım yardımcı olur. Orada site ve here, bir pasajı örnek kod şudur:

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

hmmm ... googling oturumu sırasında bunu nasıl özledim ... teşekkürler! – jldupont

+0

Endişeye gerek yok;) ... –

+0

Zevkiniz tamamen benim: 10K bariyeriniz. Görüşürüz. – jldupont

3

cevaplar elbette doğru, ama libraries kullanarak ağrıları daha az eğilimli: kabul için

import gobject 

from pygtkhelpers.utils import gsignal 

class Car(gobject.GObject): 

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