Python循环仅适用于包含Print()

时间:2015-10-25 02:09:31

标签: python multithreading python-3.x listbox pyqt5

我目前遇到以下代码问题(python 3.4.3使用PyQt5):

    while not joblist ==[]:          

        currentitem = joblist.pop()
        self.lstthreads.item(threadnum-1).setText("thread" + str(threadnum) + " - " + str(len(joblist)) + " items left to process.")

这个片段在一个线程中我首先将一个巨大的文本文件加载到一个列表中然后将它分成5个部分。每个部分都在上面的线程中运行。正如你所看到的那样,一个项目将被删除,每个循环使用pop()和一个列表框(pyqt)更新为pop()之后列表中剩余的项目总数用于跟踪进度。

然而,列表框显示: Thread1 - 剩下要处理的0项。 Thread2 - 剩下要处理的0项。 Thread3 - 剩下要处理的0项。 Thread4 - 剩下要处理的0项。 Thread5 - 剩下要处理的0项。

但奇怪的是,如果我添加一个类似的打印语句:

    while not joblist ==[]:          
        print ("trash")
        currentitem = joblist.pop()
        self.lstthreads.item(threadnum-1).setText("thread" + str(threadnum) + " - " + str(len(joblist)) + " items left to process.")

我得到了我的期望: Thread1 - 要处理的1396个项目。 Thread2 - 要处理的1396个项目。 Thread3 - 1396件待处理。 Thread4 - 1396件待处理。 Thread5 - 1396件待处理。

列表框项目也会按预期更新,为什么会这样?

1 个答案:

答案 0 :(得分:-1)

由于其他线程,你的主线程没有运行,不知道没有完整代码的原因,但是调用QCoreApplication.processEvents()应该解决这个问题。