[英]PYQT: How to capture output of python's interpreter and display it in QEditText?
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: 有人可以给我一个关于如何将打印语句的输出附加到PYQT中的QEditext的详细解释...我尝试了上面给出的代码,但它不完整,我得到了:
TypeError: connect() slot argument should be a callable or a signal, not 'QTextEdit'
In the first file i wrote: 在我写的第一个文件中:
from PyQt4 import QtCore
class EmittingStream(QtCore.QObject):
textWritten = QtCore.pyqtSignal(str)
def write(self, text):
self.textWritten.emit(str(text))
In a seperate file I imported the first file and it is like this: 在一个单独的文件中,我导入了第一个文件,它是这样的:
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? 我知道我的代码不完整 ......我应该添加什么信号?
See if this works for you: 看看这是否适合您:
#!/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_())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.