首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将标准输出和标准错误从辅助线程重定向到PyQt4 QTextEdit

将标准输出和标准错误从辅助线程重定向到PyQt4 QTextEdit
EN

Stack Overflow用户
提问于 2014-01-12 12:52:11
回答 1查看 16.5K关注 0票数 27

堆栈溢出。再一次,我在急需的时候来到你们身边,摇摇欲坠地走在精神错乱的边缘。这个问题--从标题中可以明显看出--是我在这里看到的其他几个问题的融合。

我有一个PyQt应用程序,我想将标准输出和标准错误流重新路由到没有delay.中的QTextEdit

最初,我找到了以下堆栈溢出的答案: https://stackoverflow.com/a/17145093/629404

这种方法工作得很好,但有一点需要注意:如果在CPU处理一个相对较长的方法时多次更新stdout或stderr,那么当主线程返回到应用程序循环时,所有的更新都会同时出现。不幸的是,我有一些方法需要20秒才能完成(与网络相关),因此应用程序变得没有响应-并且QTextEdit不会更新-直到它们完成。

为了解决这个问题,python i将所有的图形用户界面处理委托给了主线程,并且我已经产生了第二个线程来处理更长的网络操作,使用pyqtSignals通知主线程工作何时完成并返回结果。当我开始测试以这种方式编写的代码时,python解释器立即开始崩溃,没有任何警告。

这就是它变得非常糟糕的地方: Python崩溃是因为-使用上面包含的链接中的类-我已经将sys.stdout/err流分配给了QTextEdit小部件;PyQt小部件不能从除应用程序线程以外的任何线程修改,而且由于对stdout和stderr的更新来自我创建的辅助工作线程,因此它们违反了这一规则。我注释掉了重定向输出流的代码部分,毫无疑问,程序运行没有错误。

这让我回到了起点,并使我陷入了一个令人困惑的境地;假设我继续在主线程中处理与图形用户界面相关的操作,并在辅助线程中处理计算和更长的操作(我逐渐理解这是防止应用程序在用户触发事件时阻塞的最佳方法),我如何将Stdout和Stderr从两个线程重定向到QTextEdit小部件?上面链接中的类在主线程上工作得很好,但当更新来自第二个线程时,就会杀死python -原因如上所述。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21071448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档