我已经读过了 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我无法用来获取返回值。
我不知道如何解决这个问题。也许一些有更多线程经验的人有一些想法?如果您需要其他数据,请询问,但我认为我的示例包含所有必要的信息。
答案 0 :(得分:1)
此类事物的常见方法是使用Queue.Queue对象将命令传递给一个或多个工作线程。工作线程将等待队列中的拉动,直到队列中的项目准备好被拉出。命令对象的一部分可以是GUI线程中的一个目标,用于在命令完成时以(以线程安全的方式,如wx.CallAfter)发送消息。
您还应该查看wx.lib.delayedresult模块。它与上述类似,但功能更强大,更强大。