如何实现GUI下的事件多路响应


在GUI中进行多线程编程是一件很麻烦的事情,一直以来我都在寻找一个通用的方便的处理方法。在前一段时间中我曾经发表过关于长流程的处理,主要是在处理中插入一个对调度器的处理,而这个调度器使用了队列来实现子线程与主线程之间的数据通信。它的确可以解决一些问题,但并不是非常的方便。那么总结在
wxPython
中所提出的解决多线程问题的答案如下:
  • 不要在子线程中进行GUI的更新处理,所有的GUI的更新全部由GUI线程(主线程)来完成
    • 使用自定义事件来定义一个事件,然后就可以使用wxPostEvent来发送这个事件,这样会将这个事件放入主线程的事件循环中,从而使用事件得以安全的处理。
    • 使用线程安全的队列(Queue)来处理主线程与子线程的进程序通讯。
    • 再有wxPython提供了方便的wxCallAfter()方法来实现wxPostEvent的处理。