J'ai un QApplication, avec beaucoup de classes et de fonctions, qui affiche beaucoup de stdout sur la console. Je veux rediriger ce stdout et stderr à un QTextBrowser (cela fait également partie de la QApplication). Y at-il un tweak pour le faire.Rediriger la sortie dans PyQt
Répondre
J'ai créé une bibliothèque de widgets personnalisés PyQt open-source, dont l'un est un classeur (XLoggerWidget) et un autre est un interpréteur Python complet (XConsoleEdit). Il fait ce que vous cherchez.
Vous pouvez l'obtenir ici si vous voulez: http://dev.projexsoftware.com/projects/projexui
La partie que vous cherchez est dans le XConsoleEdit (projexui.widgets.xconsoleedit), mais le sens général de c'est:
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_()
Ceci est une version simplifiée de quoi dans le XConsoleEdit, mais c'est l'idée générale et devrait toujours fonctionner pour ce que vous allez si vous ne voulez pas télécharger le code.
Dans cet exemple, vous remarquerez que seuls les journaux d'impression et d'erreur sont acheminés vers l'édition. Si vous souhaitez connecter le système de journalisation Python à l'édition, vous aurez besoin de quelque chose d'un peu plus complexe où vous définissez un journal de logs.Handler et le lier à votre widget.
Ce code serait trouvé dans projexui.widgets.xloggerwidget
Il est un peu plus long et plus complexe, donc je ne vais pas le charger ici ... mais si vous avez des questions à ce sujet, faites le moi savoir.
# SEULEMENT VÉRIFIEZ CE LIEN POUR OBTENIR DES INFO SUR LA REDIRECTION DE LA SORTIE EN PYTHON http://stackoverflow.com/questions/8356336/how-to- capture-sortie-de-pythons-interprète-et-show-dans-un-widget-texte – kasa
- 1. Invite à la sortie dans l'application PyQt
- 2. Rediriger la sortie audio
- 3. Rediriger la sortie Debug.Assert()
- 4. Comment rediriger la sortie dans web.py
- 5. rediriger la sortie de 'where' dans dbx
- 6. Rediriger la sortie de test
- 7. Rediriger la sortie en bash
- 8. Rediriger la sortie audio vers la ligne
- 9. Rediriger la sortie Trace vers la console
- 10. Sortie et réponse à Javascript avec PyQt
- 11. Rediriger la sortie de fichier en python
- 12. Rediriger la sortie ttisql vers le fichier
- 13. Comment rediriger la sortie printf en code?
- 14. Rediriger la sortie des scripts enfants Bash
- 15. rediriger la sortie de editcap vers tcpdump
- 16. Essayer de produire une sortie monospace dans le navigateur pyqt
- 17. Rediriger la sortie standard vers syslog
- 18. Comment rediriger la sortie du script Groovy?
- 19. Puis-je rediriger la sortie de TPAGE
- 20. Rediriger la sortie sed vers tr
- 21. Le signal de sortie n'est pas intercepté dans PyQt
- 22. Python: Comment rediriger cette sortie?
- 23. rediriger wget en-tête sortie
- 24. Comment rediriger la sortie vers un répertoire différent dans BASH?
- 25. Comment rediriger la sortie vers un écrivain dans rhino?
- 26. Rediriger le code de sortie LSOF dans la variable
- 27. rediriger la sortie awk vers le fichier dans bash
- 28. Gérer une erreur et rediriger la sortie dans le shell
- 29. Rediriger la sortie de s'attendre à logfile dans attendre
- 30. Rediriger/stocker la sortie du shell dans une variable GDB?
Pour plus d'informations sur la redirection de la sortie vers python, consultez ce lien: [Comment capturer la sortie de l'interpréteur Python et l'afficher dans un widget Texte?] (Http://stackoverflow.com/questions/8356336/how-to-capture -output-of-pythons-interpreter-and-show-in-a-text-widget) – kasa