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 Ach ja, programmiert wurde das Ganze mit Python 3.4 und PyQt 5.3.1.
Danke und Grüsse
Konsole in ein QTextEdit integrieren
- 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?
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
assert encoding_kapiert
- 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.
Anstelle multipler QTextEdit kannst du auch nur mit einem QTextEdit in Verbindung mit mehreren QTextDocument arbeiten.
@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.
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.
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
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
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
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
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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: 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.
Wenn Dir das reicht...papaya hat geschrieben: Zumindestens scheint diese Lösung zu funktionieren.
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
assert encoding_kapiert
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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 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...
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@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
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