gpt4 book ai didi

python - 如何将参数传递给 win32com 事件处理程序

转载 作者:太空宇宙 更新时间:2023-11-04 03:25:27 25 4
gpt4 key购买 nike

下面的代码工作正常。我找不到将一些参数传递给 EventHandler 或从 EventHandler 调用 MainClass 的方法的方法。例如,我不想使用常量 param,而是想通过构造函数或 setter 方法传递它。我试过来自 here 的建议.但在这种情况下,EventHandler 实例不会捕获任何事件(或者至少没有出现在标准输出中)。

class EventHandler:
param = "value"
def OnConnected(self):
print 'connected'
return True

class MainClass:
def run(self):
pythoncom.CoInitialize()
session = win32com.client.Dispatch("Lib.Obj")
session_id = pythoncom.CoMarshalInterThreadInterfaceInStream(pythoncom.IID_IDispatch, session)
args = { 's_id': session_id, }
thread = threading.Thread(target=self.run_in_thread, kwargs=args)
thread.start()

def run_in_thread(self, s_id):
pythoncom.CoInitialize()
session = win32com.client.DispatchWithEvent(
pythoncom.CoGetInterfaceAndReleaseStream(s_id, pythoncom.IID_IDispatch),
EventHandler
)
session.connect()
while True:
pythoncom.PumpWaitingMessages()
time.sleep(1)

if __name__ == '__main__':
obj = MainClass()
obj.run()

最佳答案

一种可能是使用WithEvents 函数。但这可能不是最好的方法。此外,现在 handlerclient 对象是不同的实体,因此这导致它们之间存在额外的交互机制。

class EventHandler:

def set_params(self, client):
self.client = client

def OnConnected(self):
print "connected!"
self.client.do_something()
return True

client = win32com.client.Dispatch("Lib.Obj")
handler = win32com.client.WithEvents(client, EventHandler)
handler.set_client(client)

client.connect()

while True:
PumpWaitingMessages()
time.sleep(1)

这里是 a complete example .

关于python - 如何将参数传递给 win32com 事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33208969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com