从另一个线程在两个方向上与wxPython框架交互

时间:2013-02-01 11:27:48

标签: python multithreading wxpython

我已经读过了 http://wiki.wxpython.org/LongRunningTasks http://wiki.wxpython.org/CallAfter 并在谷歌搜索了很多,但没有找到我的问题的答案。因为在我看来这将是很多代码而且它更像是一个理论问题,我希望没有代码就可以。

我想用一个例子做什么:我在主线程中有一个带有复选框的网格(wx.grid)。然后我启动一个新线程(thread.start_new_thread),我遍历所有行(每行1秒)并检查是否设置了复选框。如果设置,则完成一些工作。

这是有效的,如果我在之前读出所有行我启动线程。但是我需要在线程运行时读出,因为用户应该能够取消选中或选中另一个复选框!但是,如果我在新线程中读出它,有时会出现“NonType Object is not callable”错误。我认为因为wx.CallAfter应该用于与其他线程中的网格进行交互。但CallAfter我无法用来获取返回值。

我不知道如何解决这个问题。也许一些有更多线程经验的人有一些想法?如果您需要其他数据,请询问,但我认为我的示例包含所有必要的信息。

1 个答案:

答案 0 :(得分:1)

此类事物的常见方法是使用Queue.Queue对象将命令传递给一个或多个工作线程。工作线程将等待队列中的拉动,直到队列中的项目准备好被拉出。命令对象的一部分可以是GUI线程中的一个目标,用于在命令完成时以(以线程安全的方式,如wx.CallAfter)发送消息。

您还应该查看wx.lib.delayedresult模块。它与上述类似,但功能更强大,更强大。