Je dois créer dynamiquement des objets com à partir d'une dll activex et chacun des objets peut déclencher des événements qui devraient être traités avec des gestionnaires d'événements.Comment imiter le tableau de contrôle de vb en python pour win32com?
Je peux le faire facilement avec win32com.client.Dispatch
et win32com.client.WithEvents
et associer une classe «séparée» de gestionnaires d'événements à chacun des objets. Comme si:
class evt_1:
def OnEvent(self):
print "got event from object 1"
class evt_2:
def OnEvent(self):
print "got event from object 2"
obj_1 = win32com.client.Dispatch("mycom")
ev_1 = win32com.client.WithEvents(obj_1, evt_1)
obj_2 = win32com.client.Dispatch("mycom")
ev_1 = win32com.client.WithEvents(obj_2, evt_2)
Mais si je crée dynamiquement les objets, permet de dire que dans une liste:
listOfObjects = []
for i in range(10):
obj = win32com.client.Dispatch("mycom")
listOfObjects.append(obj)
ev = win32com.client.WithEvents(obj, MyEventHandlerClass)
Je veux coder les gestionnaires d'événements qu'une seule fois, puisque je ne sais pas combien d'objets Je créerais jusqu'à l'exécution. Et je ne sais pas comment obtenir l'objet qui a déclenché l'événement depuis le gestionnaire d'événements.
Dans VB 6, j'ai utilisé le contrôle activex en utilisant les tableaux de contrôle , et les gestionnaires d'événements ont simplement une valeur "index" du contrôle qui a déclenché l'événement.
Pensez-vous que quelque chose de similaire peut être fait en python?
Je ne sais pas à quoi servent les décorateurs python, mais peuvent-ils être utilisés pour "décorer" MyEventHandlerClass pour chaque index de l'objet com?
Oui! cela fonctionne .. merci Ryan Je vais aussi regarder dans le module comtypes .. ressemble un peu différent de win32com .. – sarshad