写一个pyqt6 textedit按行循环写入数据不阻塞ui的示例代码
时间: 2025-02-14 19:20:46 浏览: 57
在 PyQt6 中,你可以创建一个 `QTextEdit` 组件,并使用 `QThread` 来异步写入数据,防止主线程被阻塞。下面是一个简单的示例代码:
```python
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit, QVBoxLayout, QPushButton
from PyQt6.QtCore import Qt, QRunnable, pyqtSlot, QThreadPool
class DataWriter(QRunnable):
def __init__(self, text_edit, data):
super().__init__()
self.text_edit = text_edit
self.data = data
@pyqtSlot()
def run(self):
for line in self.data:
# 将每一行数据写入到文本编辑框中
self.text_edit.append(line)
# 如果你想立即显示每行,可以在这里加入适当的界面更新操作
# 比如:app.processEvents()
# 主窗口类
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.text_edit = QTextEdit(self)
self.text_edit.setReadOnly(True)
layout = QVBoxLayout()
layout.addWidget(self.text_edit)
button = QPushButton("Start Writing", self)
button.clicked.connect(self.start_writing)
layout.addWidget(button)
central_widget = QWidget()
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
def start_writing(self):
data = ["Line 1", "Line 2", "Line 3", ...] # 这里替换为你实际的数据源
worker = DataWriter(self.text_edit, data)
QThreadPool.globalInstance().start(worker) # 使用线程池异步运行
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
```
在这个例子中,我们创建了一个 `DataWriter` 类作为 QRunnable 对象,它负责在单独的工作线程中逐行写入数据。当点击按钮时,主线程会启动一个新的工作线程,而不会阻塞用户界面。
阅读全文
相关推荐














