1

这是 wxPython 源文件的摘录:

    """
    Create the output window if needed and write the string to it.
    If not called in the context of the gui thread then uses
    CallAfter to do the work there.
    """        

这在内部如何运作?为什么与 GUI 相关的调用不由其他线程直接进行很重要?

您是否知道图表或以简短的方式解释此类 GUI 概念的东西?

我很乐意,如果我不必阅读小说来理解这个问题,以便我知道如何选择我的设计。


编辑:

这是为了下面的讨论:

图表

4

1 回答 1

1

这很容易。想想一个队列,wxPython 有它自己的内部事件队列,当你调用 MainLoop 时,你会导致 wxPython 处理它app,这将从主线程调用。因此,每当您修改小部件时,它都不会干扰正在处理事件队列的 MainLoop。但是当您添加线程时,不止一个线程正在操作 GUI 和/或事件队列和 GUI 访问不同步。这就是 wx.CallAfter 有用的地方,它只是向 Event-Queue 添加一个伪事件,它将调用您指定的函数,因此它将从主线程执行,并且只有一个线程正在访问 GUI。请注意,当您传递的函数需要一段时间才能返回时,GUI 将冻结,因为不再处理事件(如移动或点击)。

相关:http ://wiki.wxpython.org/LongRunningTasks

于 2012-05-12T21:26:38.847 回答