Ich versuche, etwas zu erstellen, das von einer Python-Shell-GUI gesteuert wird.
Das einzige ist, ich weiß nicht, wie ich diese ganze Eingabe / Ausgabe-Sache machen soll. Ich möchte nur in der Lage sein, eine Eingabe einzugeben, den Python-Befehl auszuführen und die Ausgabe des Python-Befehls anzugeben. Ich weiß, dass IDLE in Tkinter erstellt wird, also verwendet es die Widgets?
Es ist buchstäblich nur eine Sache "Eingabe eingeben, Ausgabe anzeigen".
Ich habe versucht, es zu durchsuchen, aber es scheint, dass die meisten Ergebnisse mit der Befehlszeile zu tun haben, was nicht das ist, wonach ich suche. Die einzige andere Frage, die genau meiner entsprach, war auch nicht meine. Ich habe auch versucht, den Quellcode für IDLE zu finden, konnte aber nicht finden, wonach ich gesucht habe.
Ich habe einige Antworten gefunden, die für Linux funktionieren, aber ich bin unter Windows 10 ...
Ich brauche die "Shell", um in Tkinter zu sein, weil auf einer Seite des Bildschirms etwas anderes ist, das mit den Befehlsausgängen verbunden ist.
Kennt jemand die Widgets, mit denen eine sehr einfache Python-Shell erstellt wurde?
quelle
Antworten:
Einfache Python-Shell / Terminal / Eingabeaufforderung
type input
,show output
" Ding. ************************Das oben angegebene Python-Skript hat die folgende Hierarchie:
Arbeitsablauf:
Der grundlegende Workflow für den obigen Code ist wie folgt angegeben:
def welcome_note():...
Enthält die Beschriftung, die außerhalb des Textkörpers angezeigt wird.def get_text(self):...
Führt zwei Operationen aus; ** Text aus dem Textkörper abrufen ** & ** Ausgabe im Eingabefeld festlegen **.def store_commands(self, command):...
Verwenden Sie diese Option, um eine Variable in einer Datei zu speichern.def get_stored_commands(self):
... Variable in Datei speichern lassen.def check_if_file_empty():
... Größe der Datei prüfen.def run_commands(self, command):...
Diese Methode fungiert als Python-Compiler , der Befehle entgegennimmt, verarbeitet und für den angegebenen Befehl eine Ausgabe liefert. Um Befehle auszuführen, würde ich empfehlen, sie zu verwenden,subprocess-module
da sie leistungsfähigere Funktionen zum Laichen neuer Prozesse und zum Abrufen ihrer Ergebnisse bieten. Das Ausführen von Fensterbefehlen mit Python umfasst verschiedene integrierte Bibliotheken wie:1. OS ( im Detail ), 2. Unterprozess ( im Detail ) usw.
Um herauszufinden, was besser zu verwenden ist, besuchen Sie die Referenz: Unterprozessmodul ist dem OS-Modul vorzuziehen .
def start_terminal(self):...
Diese Methode beinhaltet lediglich die Funktionalität zum Initiieren destkinter
Sitzungsfensters und zum Anzeigen des Grundlayouts für das Eingabe- und Ausgabefenster.Workaroud:
Diese einfache
tkinter GUI based python shell
einfache Funktion als Windows-Eingabeaufforderung ausführen. Um Python-Befehledirectly
in der Eingabeaufforderung auszuführen, ohne in das Python-Terminal zu wechseln, gehen wir wie folgt vor:Das Ergebnis wäre einfach wie:
In ähnlicher Weise können mehrere Zeilen wie angegeben direkt gleichzeitig ausgeführt werden.
Seine Ausgabe wäre wie;
Also, um dies zu nutzen
tkinter python shell
;Entweder können Sie den Befehl als platzieren;
oder so;
oder einfach Inline-Befehl als
Sie erhalten das gleiche Ergebnis.
quelle
input
,output
Shell. Es wirkt wie einfachpython kernel
. Es funktioniert nur, was im Textkörper platziert ist . Ich habe keinen Puffer oder Speicher-Cache für den Variablenverlauf festgelegt. Lassen Sie mich zuerst in diesem LEERLAUF nach dieser Anforderung suchen!Dies ist eine einfache Shell, die hauptsächlich
exec()
zum Ausführen der Python-Anweisungen undsubprocess.Popen()
zum Ausführen eines externen Befehls verwendet wird:Geben Sie einfach die normale Python-Anweisung ein:
Oder geben Sie einen Shell-Befehl ein:
Sie können auch die
Up
Taste verwenden, um den letzten Befehl abzurufen.Beachten Sie, dass die Shell 5 Sekunden lang eingefroren wird, wenn Sie einen Systembefehl ausführen, für den Benutzereingaben erforderlich sind (Zeitüberschreitung in
communicate()
).Sie können die
on_key()
Funktion an Ihre Bedürfnisse anpassen.Bitte beachten Sie auch, dass die Verwendung
exec()
keine gute Praxis ist.quelle
Ich hatte die Python-Shell implementiert
code.InteractiveConsole
, um die Befehle für ein Projekt auszuführen. Unten ist eine vereinfachte Version, obwohl sie noch ziemlich lang ist, da ich Bindungen für spezielle Schlüssel (wie Return, Tab ...) geschrieben habe, die sich wie in der Python-Konsole verhalten sollen. Es ist möglich, weitere Funktionen wie die automatische Vervollständigung mit jedi und die Syntax-Hervorhebung mit pylements hinzuzufügen.Die Hauptidee ist, dass ich die
push()
Methode von verwendecode.InteractiveConsole
, um die Befehle auszuführen. Diese Methode wird zurückgegeben,True
wenn es sich beispielsweise um einen Teilbefehl handeltdef test(x):
, und ich verwende dieses Feedback, um eine...
Eingabeaufforderung einzufügen . Andernfalls wird die Ausgabe angezeigt und eine neue>>>
Eingabeaufforderung angezeigt. Ich erfasse die Ausgabe mitcontextlib.redirect_stdout
.Es gibt auch viel Code, der Markierungen und das Vergleichen von Indizes beinhaltet, da ich den Benutzer daran hindere, Text in zuvor ausgeführte Befehle einzufügen. Die Idee ist, dass ich eine Markierung 'Eingabe' erstellt habe, die mir sagt, wo der Beginn der aktiven Eingabeaufforderung liegt und mit der
self.compare('insert', '<', 'input')
ich wissen kann, wann der Benutzer versucht, Text über der aktiven Eingabeaufforderung einzufügen.quelle