Python PySide,在不冻结窗户的情况下睡几次

Python PySide,在不冻结窗户的情况下睡几次,python,refresh,pyside,sleep,Python,Refresh,Pyside,Sleep,我有一个字典列表,比如dict={'text':'abcd','delay':1.234}。我有一个循环,用于列表中的每个字典等待'delay',然后处理'text': for element in myList: time.sleep(element['delay']) self.ui.textEdit.append(element['text']) print element['text'] myFunction(element['text']) slee

我有一个字典列表,比如
dict={'text':'abcd','delay':1.234}
。我有一个循环,用于列表中的每个字典等待
'delay'
,然后处理
'text'

for element in myList:
    time.sleep(element['delay'])

    self.ui.textEdit.append(element['text'])
    print element['text']
    myFunction(element['text'])

sleep
print
myFunction
正常工作。但文本编辑从未改变,在我窗口的标题中,我有一句话:“没有响应”。如何避免此问题?

想要添加注释,但没有50个声誉,因此我们开始:pyside和睡眠问题已在此处被询问和回答:(

您的代码正在阻止Qt的主事件循环。GUI更新事件已排队,并且在允许再次运行事件循环之前不会被处理

一种可能的解决方法是在将文本附加到
textEdit
后调用
QtCore.QCoreApplication.processEvents()
,以强制事件循环运行并处理队列中的事件


一个更通用的解决方案是将代码移动到工作线程中,以便主线程可以自由地继续处理GUI事件。请查看我和Shadow9043中的答案以了解更多信息。问题本身与您的有所不同,但解决方案类似(请注意,编码示例是用PyQt编写的,因此可能与PySide略有不同)。

我已经看到了这个问题和答案。但问题是我的列表可能包含很多元素(超过100000个),Pyside不太喜欢创建100000个
QTimer
。@user3771487您真的需要100000个独立计时器吗?您不能只运行一个计时器,然后执行操作并运行下一个计时器吗?您所说的“运行下一个计时器”是什么意思?可能重复我已经在本页的评论中解释了我的问题和你的问题之间的区别。。。