本文介绍了PYQT:如何捕获python解释器的输出并将其显示在QEditText中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
参考帖子 这里.有人能给我一个关于如何将打印语句的输出附加到 PYQT 中的 QEditext 的详细解释......我尝试了上面给出的代码,但它不完整,我得到了:
With reference to the post here. Can someone give me a detailed explanation on how to append the print statement's output to the QEditext in PYQT... I tried the code given above but it was incomplete and I got:
TypeError: connect() slot argument should be a callable or a signal, not 'QTextEdit'
在我写的第一个文件中:
from PyQt4 import QtCore
class EmittingStream(QtCore.QObject):
textWritten = QtCore.pyqtSignal(str)
def write(self, text):
self.textWritten.emit(str(text))
在一个单独的文件中,我导入了第一个文件,它是这样的:
from PyQt4 import QtGui, QtCore
import os, sys
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.et=QtGui.QTextEdit()
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.et)
sys.stdout = EmittingStream(textWritten=self.et)
def __del__(self):
# Restore sys.stdout
sys.stdout = sys.__stdout__
def normalOutputWritten(self, text):
"""Append text to the QTextEdit."""
# Maybe QTextEdit.append() works as well, but this is how I do it:
cursor = self.et.textCursor()
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(text)
self.et.setTextCursor(cursor)
self.et.ensureCursorVisible()
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
我知道我的代码不完整...我应该添加什么信号?
I know my code is incomplete... What signal should I add?
推荐答案
看看这是否适合您:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from PyQt4 import QtGui, QtCore
class MyStream(QtCore.QObject):
message = QtCore.pyqtSignal(str)
def __init__(self, parent=None):
super(MyStream, self).__init__(parent)
def write(self, message):
self.message.emit(str(message))
class MyWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.pushButtonPrint = QtGui.QPushButton(self)
self.pushButtonPrint.setText("Click Me!")
self.pushButtonPrint.clicked.connect(self.on_pushButtonPrint_clicked)
self.textEdit = QtGui.QTextEdit(self)
self.layoutVertical = QtGui.QVBoxLayout(self)
self.layoutVertical.addWidget(self.pushButtonPrint)
self.layoutVertical.addWidget(self.textEdit)
@QtCore.pyqtSlot()
def on_pushButtonPrint_clicked(self):
print "Button Clicked!"
@QtCore.pyqtSlot(str)
def on_myStream_message(self, message):
self.textEdit.moveCursor(QtGui.QTextCursor.End)
self.textEdit.insertPlainText(message)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
app.setApplicationName('MyWindow')
main = MyWindow()
main.show()
myStream = MyStream()
myStream.message.connect(main.on_myStream_message)
sys.stdout = myStream
sys.exit(app.exec_())
这篇关于PYQT:如何捕获python解释器的输出并将其显示在QEditText中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!