所以基本上我有一些用于多点触控检测的代码,我想将它作为一个单独的线程运行,它在多点触控事件时将自定义事件发送到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代码中的单独线程运行。请有人解释一下如何做到这一点,谢谢!
答案 0 :(得分:0)
有关Python中多线程的详细信息,请参阅库存Python库中threading
模块的文档。有一个在wxPython演示的Threads
模块中的GUI中使用它的示例,尽管还有其他可行的方法。 (从Thread类派生而不是仅使用一个,等等。)该演示模块还显示了使用wx.lib.newevent
模块创建新事件类和绑定器的便捷方法。