使用后台进程浏览wxPython应用程序以进行多点触控检测

时间:2014-04-14 14:32:05

标签: events user-interface wxpython python-multithreading

所以基本上我有一些用于多点触控检测的代码,我想将它作为一个单独的线程运行,它在多点触控事件时将自定义事件发送到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代码中的单独线程运行。请有人解释一下如何做到这一点,谢谢!

1 个答案:

答案 0 :(得分:0)

有关Python中多线程的详细信息,请参阅库存Python库中threading模块的文档。有一个在wxPython演示的Threads模块中的GUI中使用它的示例,尽管还有其他可行的方法。 (从Thread类派生而不是仅使用一个,等等。)该演示模块还显示了使用wx.lib.newevent模块创建新事件类和绑定器的便捷方法。