我在谷歌上搜索了一堆示例,并在 stackoverflow 上查看了一堆关于线程的问题,但我似乎仍然无法理解。
这是我正在使用的一些示例代码:
class Debugger(QTextBrowser):
def __init__(self, parent):
super(Debugger, self).__init__(parent)
sys.stdout = self
def write(self, text):
self.moveCursor(QTextCursor.End)
self.textCursor().insertText(text)
基本上,我试图捕获任何“打印”语句或其他形式的写入标准输出流。但是我无法让它在它们到达时将它们一张一张地打印出来。相反,它会等到打印字符串的任何进程完成,然后开始记录信息。那么我该如何正确线程呢?
编辑:将代码减少到最低限度。
最佳答案
我怀疑你是在一个线程中运行它?
当其他代码运行时,Qt 主循环没有运行,因此它没有处理事件(在屏幕上绘图、获取输入等)。因此,当文本框在内部更新时,它不会被绘制到屏幕上,直到您的任务完成,然后窗口被重绘。
最好的解决方案是在单独的线程中运行正在执行输出(并需要一些时间)的进程。
一个快速而肮脏的解决方案是在您向文本框写入内容时手动迭代 Qt 主循环,请参阅 IPython iterate main loop manually? .
关于Python/PyQt/Qt 线程 : How do I print stdout/stderr right away?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8923727/