在PyQt的
重定向输出I具有的QApplication,有很多的类和函数,它在控制台上显示很多标准输出。我想重定向这个输出和错误的QTextBrowser(这也是的QApplication的一部分)。有没有任何调整来做到这一点。在PyQt的
我已经制作了一个开源PyQt定制窗口小部件库,其中一个是记录器类(XLoggerWidget),另一个是完整的Python解释器(XConsoleEdit)。它符合你的要求。
你可以在这里得到它,如果你想:http://dev.projexsoftware.com/projects/projexui
你要找的是在XConsoleEdit(projexui.widgets.xconsoleedit)的一部分,但它的一般要点是:
import logging
import sys
from PyQt4.QtCore import QObject,\
pyqtSignal
from PyQt4.QtGui import QDialog, \
QVBoxLayout, \
QPushButton, \
QTextBrowser,\
QApplication
logger = logging.getLogger(__name__)
class XStream(QObject):
_stdout = None
_stderr = None
messageWritten = pyqtSignal(str)
def flush(self):
pass
def fileno(self):
return -1
def write(self, msg):
if (not self.signalsBlocked()):
self.messageWritten.emit(unicode(msg))
@staticmethod
def stdout():
if (not XStream._stdout):
XStream._stdout = XStream()
sys.stdout = XStream._stdout
return XStream._stdout
@staticmethod
def stderr():
if (not XStream._stderr):
XStream._stderr = XStream()
sys.stderr = XStream._stderr
return XStream._stderr
class MyDialog(QDialog):
def __init__(self, parent = None):
super(MyDialog, self).__init__(parent)
# setup the ui
self._console = QTextBrowser(self)
self._button = QPushButton(self)
self._button.setText('Test Me')
# create the layout
layout = QVBoxLayout()
layout.addWidget(self._console)
layout.addWidget(self._button)
self.setLayout(layout)
# create connections
XStream.stdout().messageWritten.connect(self._console.insertPlainText)
XStream.stderr().messageWritten.connect(self._console.insertPlainText)
self._button.clicked.connect(self.test)
def test(self):
# print some stuff
print 'testing'
print 'testing2'
# log some stuff
logger.debug('Testing debug')
logger.info('Testing info')
logger.warning('Testing warning')
logger.error('Testing error')
# error out something
print blah
if (__name__ == '__main__'):
logging.basicConfig()
app = None
if (not QApplication.instance()):
app = QApplication([])
dlg = MyDialog()
dlg.show()
if (app):
app.exec_()
这是什么在XConsoleEdit的简化版本,但其总体思路,仍然应该对你要什么,如果你不想下载代码工作。
在这个例子中寿,你会发现,只有打印和错误日志被反射到编辑路由。如果您想将Python日志记录系统连接到编辑中,那么在定义logging.Handler并将其链接到您的小部件的地方需要更复杂一些。
这代码将在projexui.widgets.xloggerwidget
发现它有点更长,更复杂,所以我不打算在这里加载它......但如果你对此有任何疑问,让我知道。
#请检查此链接以获取有关重新生成PYTHON中的输出的信息http://*.com/questions/8356336/how-to-捕获输出的 - 蟒蛇口译和秀-IN-A-文本控件 – kasa 2012-08-03 07:31:49
请检查此链接以获取有关将输出重定向到python的信息: [如何捕获Python解释器的输出并在Text小部件中显示?](http://*.com/questions/8356336/how-to-capture -python -output-of-pythons-interpreter-and-show-in-a-text-widget) – kasa 2012-08-03 07:32:42