你的问题很有启发性!在处理多个GUI程序共享鼠标检测的情况下,可以采用进程池或多线程池的方式来处理。这样可以确保每个GUI程序都在自己的进程或线程中独立运行,并且不会卡死。
首先,让我们来看看如何使用多线程池来处理多个GUI程序。你可以使用concurrent.futures模块中的ThreadPoolExecutor类来创建一个线程池,并在每个线程中运行相应的GUI程序。下面是示例代码:
- import PyHook3 as pyHook
- import pythoncom
- from tkinter import *
- from concurrent.futures import ThreadPoolExecutor
- class gui(Tk):
- def __init__(self):
- Tk.__init__(self)
- self.geometry('500x500')
- self.title('GUI')
- self.hm = pyHook.HookManager() # 创建一个钩子管理对象
- self.hm.MouseAll = self.on_mouse_event
- self.hm.KeyDown = self.on_key_down
- self.hm.HookMouse()
- self.hm.HookKeyboard()
- self.after(100, self.check_events)
-
- # 监听键盘事件
- def on_key_down(self, event):
- if event.Key == 'Escape':
- win32api.PostQuitMessage() # 退出监听循环
- return True
-
- # 监听鼠标事件
- def on_mouse_event(self, event):
- if event.MessageName == 'mouse left down':
- print("单击")
- return True
-
- def check_events(self):
- pythoncom.PumpWaitingMessages()
- self.after(100, self.check_events)
- if __name__ == '__main__':
- gui_pool = ThreadPoolExecutor(max_workers=5) # 创建一个包含5个线程的线程池
- for i in range(5): # 创建5个GUI程序
- gui_pool.submit(gui().mainloop)
- gui_pool.shutdown(wait=True)
复制代码
在这个例子中,我们创建了一个包含5个线程的线程池(可以根据实际情况调整线程数量),然后使用submit方法将每个GUI程序的mainloop函数提交到线程池中运行。通过这种方式,你就可以同时运行多个GUI程序,并共享鼠标检测功能。
如果你更喜欢使用进程池来处理多个GUI程序,可以使用multiprocessing模块中的Pool类。原理类似,只是将ThreadPoolExecutor替换为Pool即可。
希望这个解决方案能够满足你的需求,并且避免卡死和被意外杀死的问题!如有其他问题,请继续提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。