Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将参数传递给Win32 COM事件处理程序_Python_Pywin32_Python Multithreading_Win32com_Pythoncom - Fatal编程技术网

Python 如何将参数传递给Win32 COM事件处理程序

Python 如何将参数传递给Win32 COM事件处理程序,python,pywin32,python-multithreading,win32com,pythoncom,Python,Pywin32,Python Multithreading,Win32com,Pythoncom,下面的代码工作正常。我找不到方法将一些参数传递给EventHandler,或者从EventHandler调用MainClass的方法。例如,我希望通过构造函数或setter方法传递它,而不是使用常量param。我已经尝试了来自的建议。但在本例中,EventHandler实例不捕获任何事件(或者至少在stdout中没有显示任何内容) 一种可能是将与events函数一起使用。但这可能不是最好的办法。现在,handler和client对象是不同的实体,因此这导致了它们之间的其他交互机制 class E

下面的代码工作正常。我找不到方法将一些参数传递给
EventHandler
,或者从
EventHandler
调用
MainClass
的方法。例如,我希望通过构造函数或setter方法传递它,而不是使用常量
param
。我已经尝试了来自的建议。但在本例中,
EventHandler
实例不捕获任何事件(或者至少在stdout中没有显示任何内容)


一种可能是将
与events
函数一起使用。但这可能不是最好的办法。现在,
handler
client
对象是不同的实体,因此这导致了它们之间的其他交互机制

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)

这是。

请阅读我的答案,这应该可以解决您的问题:
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)