Konsole in ein QTextEdit integrieren

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
papaya
User
Beiträge: 4
Registriert: Mittwoch 24. September 2014, 11:30

Hallo zusammen,
bin neu hier und habe gleich eine Frage!!! Vor kurzem habe ich hobbymäßig einen kleinen experimentellen Forth Interpreter mit Python implementiert. Das Ganze ist eine stinknormale Python-Klasse, wobei die Eingaben über input() und Ausgaben via print() bzw. sys.stdout.write() auf der Konsole erfolgen. Alles funktioniert soweit perfekt. Nun möchte ich aber den Interpreter in eine GUI integrieren, damit man ganz bequem interaktiv arbeiten kann und zusätzlich auch bereits bestehende Forth-Programme öffnen und ausführen kann bzw. eigene Programme schreiben. Das Ganze stelle ich mir so fort: es wird ein QTabWidget erstellt und dort dann einzelne Tabs erzeugt. Das erste Tab soll meinen Interpreter aufnehmen, die restlichen Tabs sind dann für die schon angesprochene Forth-Programme vorgesehen. Dazu erzeuge ich in jedem Tab ein QTextEdit. Die Ein- und Ausgaben des Interpreters sollten in dem selben Fenster erfolgen, damit man übersichtlicher arbeiten kann (wie in einem "normalen" Terminalfenster). Die Ausgaben der einzelnen Forth-Programme escheinen dagegen in einem extra dafür vorgesehenen QTextEdit im unteren Bereich des Fensters. Soweit alles klar?!!! Die Oberfläche an sich habe innerhalb von ein paar Tagen zusammengebastelt, ist ja nix Weltbewegendes dabei. Und jetzt meine Frage: wie integriere ich am elegantesten und ohne viel Aufwand meinen Interpreter im QTabWidget so, daß dadurch quasi eine ganz normale Konsole simuliert wird???!!! Muß ich dafür Signale und Slots einsetzen??? Für Eure Hilfe wäre ich sehr dankbar :D Ach ja, programmiert wurde das Ganze mit Python 3.4 und PyQt 5.3.1.
Danke und Grüsse
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hallo und Willkommen im Forum,

also da Signals und Slots bei Qt eine zentrale Roll spielen, wirst Du diese irgend wo in Deiner Oberfläche sicherlich einsetzen müssen ;-) Generell sind Deine Fragen viel zu unspezifisch! Ich kann mir trotz Deiner ganzen Beschreibungen immer noch nicht vorstellen, wie Deine "IDE" aussehen und funktionieren soll.

Allgemein gesprochen gibt es ja schon Projekte, die Text-Shells in Qt abbilden, wie etwa die Qt-Oberfläche von iPython. Evtl. kannst Du Dir da Techniken abgucken?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Wie Hyperion schon anmerkte, müsstest du dein Anliegen etwas spezifizieren. Man erlangt zwar eine ungefähre(!) Idee von dem, was du umsetzen möchtest, aber um effektiv helfen zu können, sind die Fragen zu allgemein.

Anstelle multipler QTextEdit kannst du auch nur mit einem QTextEdit in Verbindung mit mehreren QTextDocument arbeiten.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@papaya:
Was ist eine "ganz normale Console"? Wenn Du damit die Systemkonsole der gängigen Betriebssysteme meinst - da ist nichts ganz normal, die sind sehr verschieden in Funktionsumfang und "API".
Für Deine Zwecke reicht wahrscheinlich eine Ein-/Ausgabe, welche fundamentales Cursorhandling beherrscht. Als Startpunkt eignet sich da QPlainTextEdit, welches Du dann um die gewünschten Funktionen erweitern und modifizieren kannst.
papaya
User
Beiträge: 4
Registriert: Mittwoch 24. September 2014, 11:30

sorry jerch :)
unsere Beiträge sind sich anscheinend gegenseitig in die Quere gekommen. Macht aber nix.
Ja, mit einer normalen Konsole habe einfach die Standard-Ein-/Ausgabe gemeint. Das Ding eben,
wo die Python-Programme ohne GUI ihre Ausgaben mittels print() hinschicken, bzw. Eingaben via input() entgegennehmen. Aber, ich glaube die Lösung, die ich jetzt gefunden habe, ist die gleiche wie mit QPlainTextEdit...
schöne Grüße von papaya
papaya
User
Beiträge: 4
Registriert: Mittwoch 24. September 2014, 11:30

Hilfe!!! Wo ist mein etwas längerer Beitrag, den ich verfasst und abgeschickt habe, unmittelbar bevor die Antwort von jerch angezeigt wurde???!!! Scheint irgendwo im digitalen Nirwana verschwunden zu sein...
Um es noch mal einfach auszudrücken: ich habe jetzt eine Lösung gefunden, in dem ich meine Interpreter-Klasse direkt von QTextEdit erben lasse, und sie dann in ein QTabWidget einfügen kann. Zumindestens scheint diese Lösung zu funktionieren.
Schöne Grüße und bis dann,
papaya
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

papaya hat geschrieben: Um es noch mal einfach auszudrücken: ich habe jetzt eine Lösung gefunden, in dem ich meine Interpreter-Klasse direkt von QTextEdit erben lasse, und sie dann in ein QTabWidget einfügen kann.
Klingt nach einem weniger durchdachten Design! Denn rein von der OOP-Semantik klingt das nicht nach einer "Is-a" Beziehung, sondern mehr nach einer umgekehrten "Has-a" Beziehung... ;-)
papaya hat geschrieben: Zumindestens scheint diese Lösung zu funktionieren.
Wenn Dir das reicht...

Was machst Du, wenn jemand kein Qt auf seinem Rechner hat und das Ding einfach in einer Text-Shell betreiben will? Oder wenn Du selber das ganze mal als Webapplikation zur Verfügung stellen willst? Dürfte bei dem Ansatz schwierig werden ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

papaya hat geschrieben:Hilfe!!! Wo ist mein etwas längerer Beitrag, den ich verfasst und abgeschickt habe, unmittelbar bevor die Antwort von jerch angezeigt wurde???!!! Scheint irgendwo im digitalen Nirwana verschwunden zu sein...
Wenn du ihn nicht abgeschickt hast, dann ist er weg, ja. Dir wird dein Beitrag nochmal angezeigt, wenn zwischen Anfang und Ende ein weiterer Post dazukam, damit du evtl noch Anpassungen machen kannst, die durch die neuen Posts noetig/moeglich wurden. Aber du musst am Ende nochmal abschicken.
papaya
User
Beiträge: 4
Registriert: Mittwoch 24. September 2014, 11:30

@cofi
Danke für den Hinweis. Werde beim nächsten Mal besser auppassen. :)

@Hyperion
Ja, das reicht mir vollkommen, das Ganze ist nur eine Spielerei und ausschließlich für den privaten Gebrauch gedacht. Trotzdem vielen Dank für die Kommentare :)

schöne Grüsse,
papaya
Antworten