我很难弄清楚如何使用pywin32接收事件。我已经创建了代码来进行一些OPC处理。根据gen_py文件夹中生成的绑定,我应该能够注册事件处理程序,它给了我应该使用的原型...例如:
# Event Handlers
# If you create handlers, they should have the following prototypes:
# def OnAsyncWriteComplete(.......)
所以我编写的代码实现了我感兴趣的处理程序,但是没有任何想法如何将它们附加到我的客户端,并且似乎找不到对我有意义的示例。下面我创建我的客户端,然后添加一个应该有与之关联的事件的对象......
self.server = win32com.client.gencache.EnsureDispatch(driver)
# I can now call the methods on the server object like so....
new_group = self.server.OPCGroups.Add(group)
我想将我的处理程序附加到new_group对象(也许是对于self.server?)但我似乎无法理解我应该如何做到这一点。
所以我的问题是:
非常感谢任何帮助。
答案 0 :(得分:4)
经过一段时间后,我能够找到一种方法来做到这一点。我所做的是发现我可以将我的事件处理程序类附加到该组。
self.server = win32com.client.gencache.EnsureDispatch(driver)
# I can now call the methods on the server object like so....
new_group = self.server.OPCGroups.Add(group)
self._events[group] = win32com.client.WithEvents(
new_group, GroupEvent)
一旦我开始这样做似乎会触发事件,但事件直到脚本结束才会运行。为了让它处理排队的事件,我调用它似乎触发回调执行。
pythoncom.PumpWaitingMessages()
不知道它是否会对其他人有所帮助,但它似乎对我正在做的事情起作用。
答案 1 :(得分:0)
非常感谢,这非常有帮助。为了扩展这个问题,我发现我可以简单地注册驱动程序:
import win32com
class MyEvents(object): pass
server=win32com.client.gencache.EnsureDispatch(driver)
win32com.client.WithDispatch(server, MyEvents)
我通过执行help(win32com.client.WithEvents)