Hallo, gibt es eine Möglichkeit die Standartterminal Ausgabe in ein Textwidget (PyQt4)umzuleiten? Das ganze in Python3 ;) Danke :)
Stdout wird umgeleitet, indem sys.stdout ein file-like Object mit mindestens den Methoden write und flush zugewiesen wird. Mit
1 | sys.stdout = sys.__stdout__ |
Wird die Umleitung wieder aufgehoben. Hier ist ein kleines Beispiel:
1 | import sys |
2 | from PyQt4.QtGui import * |
3 | |
4 | # File-like Klasse, an dessen Instanz stdout umgeleitet wird |
5 | class TextEditStdout: |
6 | def __init__(self, textEdit): |
7 | self.textEdit = textEdit |
8 | self.text = '' |
9 | |
10 | def write(self, text): |
11 | # QTextEdit.append() erwartet die Texte absatzweise, deswegen |
12 | # werden hier die Texte gesammelt und an den Newlines in Absätze |
13 | # zerlegt |
14 | *paragraphs, self.text = (self.text + text).split('\n') |
15 | list(map(self.textEdit.append, paragraphs)) |
16 | |
17 | def flush(self): |
18 | pass |
19 | |
20 | # Beispielapplikation |
21 | app = QApplication(sys.argv) |
22 | textEdit = QTextEdit() |
23 | textEdit.show() |
24 | |
25 | # Umleiten von stdout |
26 | sys.stdout = TextEditStdout(textEdit) |
27 | |
28 | # Beispiel einer Stdout-Ausgabe (in einer echten Applikation wird print() |
29 | # natürlich von anderer Stelle aus aufgerufen) |
30 | for i in range(20): |
31 | print(i, i*i) |
32 | |
33 | sys.exit(app.exec()) |
Anmerkung: Ich bin in Qt nicht bewandert, deswegen kann man das sicher etwas geschickter machen :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.