pyqt5 textbrowser实时输出
时间: 2023-09-27 15:08:45 浏览: 357
要实现PyQt5 TextBrowser的实时输出,可以使用以下代码:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextBrowser
from PyQt5.QtCore import QThread, pyqtSignal, Qt
class OutputThread(QThread):
output_signal = pyqtSignal(str)
def __init__(self, parent=None):
super().__init__(parent)
self.running = False
def run(self):
self.running = True
while self.running:
text = "this is the output text"
self.output_signal.emit(text)
self.sleep(1)
def stop(self):
self.running = False
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.text_browser = QTextBrowser(self)
self.setCentralWidget(self.text_browser)
self.output_thread = OutputThread(self)
self.output_thread.output_signal.connect(self.append_output_text)
self.output_thread.start()
def append_output_text(self, text):
self.text_browser.moveCursor(QTextCursor.End)
self.text_browser.insertPlainText(text + '\n')
self.text_browser.moveCursor(QTextCursor.End)
def closeEvent(self, event):
self.output_thread.stop()
self.output_thread.wait()
event.accept()
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
在这个例子中,我们创建了一个 OutputThread 类,它是一个 QThread 的子类,用于在后台生成一些文本并将其发送到主线程中的 QTextBrowser 中。在 MainWindow 类中,我们创建了一个 OutputThread 实例,并使用 output_signal 信号连接到 append_output_text 方法。当 OutputThread 发出 output_signal 信号时,它将触发 append_output_text 方法,并将生成的文本追加到 QTextBrowser 中。
最后,在 MainWindow 的 closeEvent 中,我们停止 OutputThread 并等待它完成。这是因为如果我们不等待,OutputThread 可能仍然在后台运行并尝试更新已经被销毁的 QTextBrowser 对象,这会导致程序崩溃。
阅读全文