Est-il possible de créer de nouveaux signaux dans Python GTK +?Python GTK +: créer des signaux personnalisés?
Je voudrais un exemple de code squelette, s'il vous plaît.
Est-il possible de créer de nouveaux signaux dans Python GTK +?Python GTK +: créer des signaux personnalisés?
Je voudrais un exemple de code squelette, s'il vous plaît.
Un extrait:
Créer vos propres signaux
L'autre chose que vous voulez probablement utiliser lorsque le sous-classement est GObject définir signaux personnalisés. Vous pouvez créer vos propres signaux qui peuvent être émis pour les utilisateurs de votre classe peuvent se connecter à eux.
Lorsqu'un signal est émis, un ensemble de fermetures sera exécuté. Une fermeture est une abstraction du concept de rappel . Une fermeture est le rappel lui-même (un pointeur de fonction), l'utilisateur données (ce sera le dernier paramètre à le rappel) et une autre fonction pour les problèmes de nettoyage , qui ne sera pas discuté dans ce document.
Pour les besoins de cet article, vous n'avez pas vraiment besoin de connaître la différence entre un rappel et une fermeture si les deux termes seront utilisés. Mais être informé que ce n'est pas complètement correct. Comme nous l'avons déjà dit, lorsqu'un signal est émis, un ensemble de fermetures sera exécuté. L'un d'entre eux est le même pour toutes les instances de cette classe et donc son nom: la fermeture de classe, et les autres sont des rappels personnalisés de l'utilisateur . Notez que tous les signaux ne doivent pas avoir une fermeture de classe parce que c'est facultatif.
De, http://www.pygtk.org/articles/subclassing-gobject/sub-classing-gobject-in-python.htm, espérons que cela aide. Il y a exemple de code sur le site et here, un extrait:
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)
Les réponses sont correctes bien sûr, mais en utilisant libraries est moins sujette à des douleurs:
import gobject
from pygtkhelpers.utils import gsignal
class Car(gobject.GObject):
gsignal('engine-started', float) # yeah baby
Merci pour l'accepter, il m'a cassé Barrière 10k qui a tenu toute la soirée pour une raison étrange. –
@Aiden: mon plaisir: désolé, je n'ai plus de upvotes aujourd'hui (quota atteint au début). – jldupont
Pas de soucis, me pousser dans le territoire 'k' c'est assez merci! –