我有一个像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
正常工作。但是textEdit永远不会改变,我的窗口标题中有:'没有响应'。我该如何避免这个问题?
答案 0 :(得分:2)
您的代码阻止了Qt的主要事件循环。 GUI更新事件排队并且不会被处理,直到允许事件循环再次运行。
可能的解决方法是在将文本追加到QtCore.QCoreApplication.processEvents()
之后调用textEdit
以强制事件循环运行并处理队列中的事件。
更通用的解决方案是将代码移动到工作线程中,以便主线程可以继续处理GUI事件。有关详细信息,请查看我自己和this question中的Shadow9043的答案。问题本身与你的有些不同,但解决方案类似(请注意,编码示例是用PyQt编写的,因此可能与PySide略有不同)。
答案 1 :(得分:1)
想要添加评论,但不会有50个声誉,所以我们走了:pyside和睡眠问题问题已经在这里被问到并回答PySide / wait or sleep :(