这个方式我还是没有成功,改为在ui脚本中将输出窗口的内容捕获再更新发送到QTextEdit
时间: 2024-02-25 20:53:29 浏览: 128
好的,那么你可以尝试以下代码实现在UI界面中将输出窗口的内容捕获再更新发送到QTextEdit中:
```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTextEdit
from io import StringIO
import contextlib
class MyStream(object):
def __init__(self, stc):
self.stc = stc
def write(self, text):
self.stc.append(text)
@contextlib.contextmanager
def stdout_redirector(stream):
sys.stdout = stream
try:
yield
finally:
sys.stdout = sys.__stdout__
class MyWidget(QWidget):
def __init__(self):
super().__init__()
# 创建QTextEdit和按钮
self.text_edit = QTextEdit()
self.button = QPushButton("执行")
self.button.clicked.connect(self.execute_code)
# 创建垂直布局并添加控件
layout = QVBoxLayout()
layout.addWidget(self.text_edit)
layout.addWidget(self.button)
# 设置窗口的主布局
self.setLayout(layout)
def execute_code(self):
code = self.text_edit.toPlainText()
# 捕获输出到MyStream对象中
stream = MyStream(self.text_edit)
with stdout_redirector(stream):
exec(code)
if __name__ == "__main__":
app = QApplication(sys.argv)
widget = MyWidget()
widget.show()
sys.exit(app.exec_())
```
这个例子中,我们重定向了`sys.stdout`输出流到自定义的`MyStream`对象中,然后在`execute_code`方法中捕获了输出的内容,并将其添加到`QTextEdit`中。这样就可以在UI界面中看到程序的输出了。
阅读全文