没有响应wxpython的问题

时间:2013-09-20 20:53:18

标签: python-2.7 wxpython

我对wxpython很新,但还是要学习进程或线程。 每当处理数据时,我一直在线检查我的问题与非响应窗口。我在网上看到了不少例子,但我找不到解决我的问题的方法(可能我没有说明问题)因为我不使用线程,它只是一个使用while循环的普通简单程序而且必须是在while循环中大约150secs,同时我已经将打印文本重定向到日志窗口,当我正在进行另一个选项卡时,窗口显示没有响应,而这个程序正在进行中,请建议我解决方案。 代码是这样的 我在重定向文本时使用了Mike的逻辑。

class RedirectText(object):
    def __init__(self,aWxTextCtrl):
        self.out=aWxTextCtrl

    def write(self,string):
        self.out.WriteText(string)

Class GUI(wx.Frame):
    def __init__(self, parent):
        # All the frame work
        # redirected print to the stdout

    def run(self, input):
        #calls another operation 
        self.set_BankID(BankID, serSCU,SerialLogResult)

    def set_BankID(self,BankID, serSCU,SerialLogResult):
        #while loop
        iteration=0
        While iteration < 3:
            wx.Yield()
            while process = 0:
                wait 150 secs
            #end of inner while loop
            #condition met for iteration
         #End of outer while loop

if __name__ == '__main__':
    app=wx.App(False)
    frame =GUI(None)
    frame.Show()
    app.MainLoop()

1 个答案:

答案 0 :(得分:0)

问题是您正在阻止主循环,因此GUI无法再自行更新。您需要将该长时间运行的进程放入一个线程中,并使用wxPython线程安全方法之一将更新发送到GUI。这些方法如下:

  • wx.CallAfter / wx.CallLater
  • wx.PostEvent

您可以在以下位置阅读各种方法:

我更喜欢使用wx.CallAfter,因为我认为这是最简单的。