因此,基本上我有一些多点触摸检测的代码,我想将其作为一个单独的线程运行,在多点触摸事件时将自定义事件发送到wxPython GUI。
现在我可以发布多点触控追踪的代码,但要使用它,你需要一个触控板、服务器应用程序和检测代码,所以我认为为了这个问题,最好考虑一个简单的例子。
例如,假设一个事件模拟器每10秒发送一个事件:
import wx
import wx.lib.newevent
import time
MultiTouchEvent, EVT_MULTITOUCH = wx.lib.newevent.NewEvent()
class EventSimulator:
def __init__(self):
self.eventdata = 0
def Start(self):
self.RunTUIO()
def RunTUIO(self):
while True:
time.sleep(10)
wx.PostEvent(GUI, MultiTouchEvent(self.eventdata))
self.eventdata += 1
if __name__ == '__main__':
MultiTouchTracker = EventSimulator()
MultiTouchTracker.Start()
现在,每当这些事件发生在wxPython GUI中时,我都想接收它们(类似于这样):
import wx
class Frame(wx.Frame):
def __init__(self, title):
wx.Frame.__init__(self, None, title=title, size=(350,200))
self.Bind(EVT_MULTITOUCH, self.handler)
def handler(self, event):
data = event.data,
print data
if __name__ == '__main__':
app = wx.App(redirect=False)
window = Frame("My Basic GUI")
window.Show()
app.MainLoop()
问题是我无法训练如何将这两段代码组合成一个工作示例。据我所知,我需要将事件模拟器作为GUI代码中的一个独立线程来运行。请有人解释一下怎么做,谢谢!
有关Python中多线程的详细信息,请参阅Python库中threading
模块的文档。在wxPython演示的Threads
模块中,有一个在GUI中使用它的例子,尽管也有其他可行的方法。(从Thread类派生而不是仅使用一个,等等)该演示模块还展示了使用wx.lib.newevent
模块创建新事件类和绑定器的方便方法。