【问题标题】:Threading wxPython app with background process for multitouch detection使用后台进程线程化 wxPython 应用程序以进行多点触控检测
【发布时间】:2014-04-14 14:32:04
【问题描述】:

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

【问题讨论】:

    标签: events user-interface wxpython python-multithreading


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我查看了几个文档和大量示例,但我很难让它发挥作用。我发现他们通常是在讨论按下按钮时在第二个线程中执行的某些操作,而不是在整个执行时间内与 GUI 并行运行的第二个进程。但我会再看看!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    相关资源
    最近更新 更多