重定向輸出I具有的QApplication,有很多的類和函數,它在控制檯上顯示很多標準輸出。我想重定向這個輸出和錯誤的QTextBrowser(這也是的QApplication的一部分)。有沒有任何調整來做到這一點。在PyQt的
Q
在PyQt的
1
A
回答
3
我已經制作了一個開源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
發現它有點更長,更復雜,所以我不打算在這裏加載它......但如果你對此有任何疑問,讓我知道。
+1
#請檢查此鏈接以獲取有關重新生成PYTHON中的輸出的信息http://stackoverflow.com/questions/8356336/how-to-捕獲輸出的 - 蟒蛇口譯和秀-IN-A-文本控件 – kasa 2012-08-03 07:31:49
相關問題
- 1. PyQt的:在QListWidget
- 2. 在PyQt的
- 3. PyQt的:在QFileSystemModel
- 4. PyQt的:在的QGraphicsView
- 5. 如何在PyQt的
- 6. QtConcurrent在PySide/PyQt的
- 7. 不能在PyQt的
- 8. PyQt的:在瑪雅
- 9. 拖放在PyQt
- 10. Drag.start在pyqt
- 11. 集成的Tkinter到PyQt的 - 或繪畫在PyQt的
- 12. 定製MPL在PyQt的
- 13. 如何在Python和PyQt的
- 14. 錯誤而在PyQt的
- 15. PyQt的情節在網格
- 16. 並行QLabel在PyQt
- 17. 光標已在PyQT
- 18. QGraphicsObject與QPropertyAnimation在PyQt
- 19. 什麼路徑在PyQt QIcon.setThemeSearchPaths()在pyqt在win7中輸入?
- 20. PyQt的self.close()()
- 21. 的PyQt和QtDesigner
- 22. WebScrapping,PyQt的
- 23. PyQt的beginremoverows
- 24. 如何PyQt的
- 25. PyQt的文檔
- 26. 空的QMainWindow,PyQt
- 27. Android上的PyQt
- 28. PyQt的 - QPushButton環
- 29. 錯誤的PyQt的
- 30. 的PyQt和WebSockets的
請檢查此鏈接以獲取有關將輸出重定向到python的信息: [如何捕獲Python解釋器的輸出並在Text小部件中顯示?](http://stackoverflow.com/questions/8356336/how-to-capture -python -output-of-pythons-interpreter-and-show-in-a-text-widget) – kasa 2012-08-03 07:32:42