0

我对 wxpython 很陌生,还没有学习进程或线程。每当处理数据时,我一直在在线检查我的无响应窗口问题。我在网上看到了很多例子,但我找不到我的问题的解决方案(可能我没有明白这一点)因为我不使用线程,它只是一个使用 while 循环的普通简单程序,它必须是在while循环内大约150秒,同时我将打印文本重定向到日志窗口,该窗口也被冻结,当我转到其他选项卡时,窗口显示没有响应,而这个程序正在处理中,请建议我解决方案. 代码是这样的,我在重定向文本时使用了 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()
4

1 回答 1

0

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

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

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

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

于 2013-09-20T21:17:28.123 回答