IDLE — Python-Editor und Shell

Quellcode: Lib/idlelib/


IDLE ist Pythons integrierte Entwicklungsumgebung und Lernumgebung.

IDLE bietet folgende Funktionen

  • Plattformübergreifend: funktioniert größtenteils gleich auf Windows, Unix und macOS

  • Python-Shell-Fenster (interaktiver Interpreter) mit Farbkodierung für Code-Eingabe, -Ausgabe und Fehlermeldungen

  • Mehrfenster-Texteditor mit Mehrfach-Rückgängigmachen, Python-Farbkodierung, intelligentem Einrücken, Call-Tips, Autovervollständigung und weiteren Funktionen

  • Suche in jedem Fenster, Ersetzen in Editorfenstern und Suche in mehreren Dateien (grep)

  • Debugger mit persistenten Breakpoints, schrittweiser Ausführung und Anzeige von globalen und lokalen Namensräumen

  • Konfiguration, Browser und weitere Dialoge

Bearbeiten und Navigation

Editorfenster

IDLE kann beim Start Editorfenster öffnen, abhängig von den Einstellungen und wie IDLE gestartet wird. Danach verwenden Sie das Datei-Menü. Es kann nur ein offenes Editorfenster für eine bestimmte Datei geben.

Die Titelleiste enthält den Dateinamen, den vollständigen Pfad und die Version von Python und IDLE, die das Fenster ausführen. Die Statusleiste enthält die Zeilennummer ("Ln") und die Spaltennummer ("Col"). Zeilennummern beginnen mit 1; Spaltennummern mit 0.

IDLE geht davon aus, dass Dateien mit einer bekannten .py*-Erweiterung Python-Code enthalten und andere Dateien nicht. Python-Code wird über das Ausführen-Menü ausgeführt.

Tastenkombinationen

Der Einfügecursor von IDLE ist ein dünner vertikaler Strich zwischen Zeichenpositionen. Wenn Zeichen eingegeben werden, rückt der Einfügecursor und alles rechts davon um ein Zeichen nach rechts, und das neue Zeichen wird an der neuen Stelle eingefügt.

Mehrere Tasten, die keine Zeichen sind, bewegen den Cursor und löschen möglicherweise Zeichen. Das Löschen legt keinen Text auf der Zwischenablage ab, aber IDLE verfügt über eine Liste für Rückgängigmachen. Wo immer dieses Dokument über Tasten spricht, bezieht sich "C" auf die Steuerung-Taste unter Windows und Unix und die Befehls-Taste unter macOS. (Und alle solchen Diskussionen gehen davon aus, dass die Tasten nicht an etwas anderes neu gebunden wurden.)

  • Pfeiltasten bewegen den Cursor eine Zeichen- oder Zeile.

  • C-Pfeil links und C-Pfeil rechts bewegen sich nach links oder rechts um ein Wort.

  • Pos1 und Ende gehen zum Anfang oder Ende der Zeile.

  • Bild auf und Bild ab gehen eine Bildschirmseite nach oben oder unten.

  • C-Pos1 und C-Ende gehen zum Anfang oder Ende der Datei.

  • Rücktaste und Entf (oder C-d) löschen das vorherige oder nächste Zeichen.

  • C-Rücktaste und C-Entf löschen ein Wort nach links oder rechts.

  • C-k löscht ("tötet") alles nach rechts.

Standard-Tastenkombinationen (wie C-c zum Kopieren und C-v zum Einfügen) können funktionieren. Tastenkombinationen werden im Dialog "IDLE konfigurieren" ausgewählt.

Automatisches Einrücken

Nach einer Block-öffnenden Anweisung wird die nächste Zeile um 4 Leerzeichen eingerückt (im Python-Shell-Fenster um einen Tab). Nach bestimmten Schlüsselwörtern (break, return etc.) wird die nächste Zeile ausgerückt. Beim führenden Einrücken löscht die Rücktaste bis zu 4 Leerzeichen, wenn diese vorhanden sind. Tab fügt Leerzeichen ein (im Python-Shell-Fenster einen Tab), die Anzahl hängt von der Einrückungsbreite ab. Derzeit sind Tabs aufgrund von Tcl/Tk-Beschränkungen auf vier Leerzeichen begrenzt.

Siehe auch die Befehle "Region einrücken/ausrücken" im Format-Menü.

Suchen und Ersetzen

Jede Auswahl wird zum Suchziel. Nur Auswahlen innerhalb einer Zeile funktionieren, da Suchen nur innerhalb von Zeilen durchgeführt werden, aus denen das abschließende Zeilenendezeichen entfernt wurde. Wenn [x] Regulärer Ausdruck aktiviert ist, wird das Ziel gemäß dem Python-Modul re interpretiert.

Vervollständigungen

Vervollständigungen werden, wenn angefordert und verfügbar, für Modulnamen, Attribute von Klassen oder Funktionen oder Dateinamen bereitgestellt. Jede Abrufmethode zeigt eine Vervollständigungsbox mit vorhandenen Namen an. (Für Tab-Vervollständigungen siehe unten eine Ausnahme.) Für jede Box ändern Sie den vervollständigten Namen und das hervorgehobene Element in der Box, indem Sie Zeichen tippen und löschen; indem Sie die Tasten Pfeil nach oben, Pfeil nach unten, Bild auf, Bild ab, Pos1 und Ende drücken; und durch einen einzelnen Klick innerhalb der Box. Schließen Sie die Box mit den Tasten Esc, Enter und doppeltem Tab oder durch Klicken außerhalb der Box. Ein Doppelklick innerhalb der Box wählt aus und schließt.

Eine Möglichkeit, eine Box zu öffnen, ist das Tippen eines Zeichens und Warten auf ein vordefiniertes Intervall. Dies ist standardmäßig auf 2 Sekunden eingestellt; passen Sie es im Einstellungsdialog an. (Um automatische Popups zu verhindern, stellen Sie die Verzögerung auf eine große Anzahl von Millisekunden ein, z. B. 100000000.) Für importierte Modulnamen oder Klassen- oder Funktionsattribute tippen Sie auf ".". Für Dateinamen im Stammverzeichnis tippen Sie os.sep oder os.altsep unmittelbar nach einem öffnenden Anführungszeichen. (Unter Windows kann zuerst ein Laufwerk angegeben werden.) Wechseln Sie in Unterverzeichnisse, indem Sie einen Verzeichnisnamen und einen Trenner eingeben.

Anstatt zu warten oder nachdem eine Box geschlossen wurde, öffnen Sie sofort eine Vervollständigungsbox mit "Vervollständigungen anzeigen" im Bearbeiten-Menü. Die Standard-Hotkey ist C-Leertaste. Wenn Sie vor dem Öffnen der Box ein Präfix für den gewünschten Namen eingeben, wird der erste Treffer oder ein nahezuer Treffer sichtbar gemacht. Das Ergebnis ist dasselbe, als wenn Sie ein Präfix eingeben, nachdem die Box angezeigt wurde. "Vervollständigungen anzeigen" nach einem Anführungszeichen vervollständigt Dateinamen im aktuellen Verzeichnis anstelle eines Stammverzeichnisses.

Das Drücken von Tab nach einem Präfix hat normalerweise die gleiche Wirkung wie "Vervollständigungen anzeigen". (Ohne Präfix wird eingerückt.) Wenn jedoch nur ein Treffer für das Präfix vorhanden ist, wird dieser Treffer sofort in den Editortext eingefügt, ohne eine Box zu öffnen.

Wenn Sie "Vervollständigungen anzeigen" aufrufen oder Tab nach einem Präfix drücken, außerhalb einer Zeichenkette und ohne vorheriges "." öffnet sich eine Box mit Schlüsselwörtern, integrierten Namen und verfügbaren Modulnamen.

Beim Bearbeiten von Code in einem Editor (im Gegensatz zur Shell) erhöhen Sie die verfügbaren Modulnamen, indem Sie Ihren Code ausführen und die Shell danach nicht neu starten. Dies ist besonders nützlich, nachdem Imports am Anfang einer Datei hinzugefügt wurden. Dies erhöht auch die möglichen Attribut-Vervollständigungen.

Vervollständigungsboxen schließen anfänglich Namen aus, die mit "_ " beginnen, oder für Module, die nicht in "__all__" enthalten sind. Die ausgeblendeten Namen können durch Eingabe von "_ " nach "." abgerufen werden, entweder vor oder nach dem Öffnen der Box.

Calltips

Ein Calltip wird automatisch angezeigt, wenn Sie nach dem Namen einer *zugänglichen* Funktion eine öffnende Klammer eingeben. Ein Funktionsname-Ausdruck kann Punkte und Indizes enthalten. Ein Calltip bleibt bestehen, bis er angeklickt wird, der Cursor aus dem Argumentbereich herausbewegt wird oder eine schließende Klammer eingegeben wird. Wann immer sich der Cursor im Argumentteil einer Definition befindet, wählen Sie "Bearbeiten" und "Calltip anzeigen" im Menü oder geben Sie die entsprechende Tastenkombination ein, um einen Calltip anzuzeigen.

Der Calltip besteht aus der Signatur und dem Docstring der Funktion bis zur ersten Leerzeile oder der fünften Nicht-Leerzeile. (Einigen integrierten Funktionen fehlt eine zugängliche Signatur.) Ein "/" oder "*" in der Signatur bedeutet, dass die vorhergehenden oder folgenden Argumente nur per Position oder Name (Schlüsselwort) übergeben werden. Details können sich ändern.

In der Shell hängen die zugänglichen Funktionen davon ab, welche Module in den Benutzerprozess importiert wurden, einschließlich der von Idle selbst importierten, und welche Definitionen ausgeführt wurden, alles seit dem letzten Neustart.

Starten Sie zum Beispiel die Shell neu und geben Sie itertools.count( ein. Ein Calltip erscheint, da Idle itertools für den eigenen Gebrauch in den Benutzerprozess importiert. (Dies könnte sich ändern.) Geben Sie turtle.write( ein und es erscheint nichts. Idle importiert turtle nicht selbst. Der Menüeintrag und die Tastenkombination tun ebenfalls nichts. Geben Sie import turtle ein. Danach zeigt turtle.write( einen Calltip an.

In einem Editor haben Importanweisungen keine Auswirkung, bis die Datei ausgeführt wird. Möglicherweise möchten Sie eine Datei ausführen, nachdem Sie Importanweisungen geschrieben haben, nachdem Sie Funktionsdefinitionen hinzugefügt haben oder nachdem Sie eine vorhandene Datei geöffnet haben.

Codekontext

Innerhalb eines Editorfensters, das Python-Code enthält, kann der Codekontext umgeschaltet werden, um einen Bereich am oberen Rand des Fensters anzuzeigen oder auszublenden. Wenn dieser Bereich angezeigt wird, friert er die anfänglichen Zeilen für Blockcode ein, wie z. B. diejenigen, die mit den Schlüsselwörtern class, def oder if beginnen, die sonst aus dem Blickfeld gescrollt wären. Die Größe des Bereichs wird nach Bedarf erweitert und verkleinert, um alle aktuellen Kontextstufen anzuzeigen, bis zur maximalen Anzahl von Zeilen, die im Dialog "IDLE konfigurieren" festgelegt ist (standardmäßig 15). Wenn keine aktuellen Kontextzeilen vorhanden sind und die Funktion eingeschaltet ist, wird eine einzelne Leerzeile angezeigt. Ein Klick auf eine Zeile im Kontextbereich verschiebt diese Zeile an den Anfang des Editors.

Die Text- und Hintergrundfarben für den Kontextbereich können im Reiter "Hervorhebungen" des Dialogs "IDLE konfigurieren" eingestellt werden.

Shell-Fenster

Geben Sie in der IDLE-Shell vollständige Anweisungen ein, bearbeiten Sie sie und rufen Sie sie ab. (Die meisten Konsolen und Terminals arbeiten nur mit einer physischen Zeile gleichzeitig.)

Übermitteln Sie eine einzeilige Anweisung zur Ausführung, indem Sie Enter drücken, wenn sich der Cursor auf der Zeile befindet. Wenn eine Zeile mit einem Backslash (\) erweitert wird, muss sich der Cursor auf der letzten physischen Zeile befinden. Übermitteln Sie eine mehrzeilige zusammengesetzte Anweisung, indem Sie nach der Anweisung eine Leerzeile eingeben.

Wenn Code in die Shell kopiert wird, wird er erst kompiliert und möglicherweise ausgeführt, wenn Sie Enter drücken, wie oben angegeben. Sie können den kopierten Code vorher bearbeiten. Wenn Sie mehr als eine Anweisung in die Shell kopieren, führt dies zu einem SyntaxError, wenn mehrere Anweisungen als eine einzige kompiliert werden.

Zeilen, die RESTART enthalten, bedeuten, dass der Benutzer-Ausführungsprozess neu gestartet wurde. Dies geschieht, wenn der Benutzer-Ausführungsprozess abgestürzt ist, wenn Sie einen Neustart im Shell-Menü anfordern oder wenn Sie Code in einem Editorfenster ausführen.

Die in den vorherigen Unterabschnitten beschriebenen Bearbeitungsfunktionen funktionieren bei der interaktiven Eingabe von Code. Das Shell-Fenster von IDLE reagiert auch auf Folgendes:

  • C-c versucht, die Ausführung einer Anweisung zu unterbrechen (kann aber fehlschlagen).

  • C-d schließt die Shell, wenn es an einer >>> Eingabeaufforderung eingegeben wird.

  • Alt-p und Alt-n (C-p und C-n auf macOS) rufen zur aktuellen Eingabeaufforderung die vorherige oder nächste, zuvor eingegebene Anweisung ab, die mit etwas übereinstimmt, das bereits eingegeben wurde.

  • Enter, während sich der Cursor auf einer vorherigen Anweisung befindet, hängt diese an alles an, was bereits an der Eingabeaufforderung eingegeben wurde.

Textfarben

Idle verwendet standardmäßig schwarzen Text auf weißem Hintergrund, färbt aber Text mit spezieller Bedeutung. Für die Shell sind dies Shell-Ausgabe, Shell-Fehler, Benutzer-Ausgabe und Benutzer-Fehler. Für Python-Code, an der Shell-Eingabeaufforderung oder in einem Editor, sind dies Schlüsselwörter, integrierte Klassen- und Funktionsnamen, Namen nach class und def, Zeichenketten und Kommentare. Für jedes Textfenster sind dies der Cursor (falls vorhanden), gefundener Text (wenn möglich) und ausgewählter Text.

IDLE hebt auch die Soft-Schlüsselwörter match, case und _ in Mustervergleichsanweisungen hervor. Diese Hervorhebung ist jedoch nicht perfekt und wird in einigen seltenen Fällen falsch sein, einschließlich einiger _ in case-Mustern.

Die Textfärbung erfolgt im Hintergrund, sodass manchmal unformatierter Text sichtbar ist. Um das Farbschema zu ändern, verwenden Sie den Dialog "IDLE konfigurieren", Reiter "Hervorhebungen". Das Markieren von Debugger-Breakpoint-Zeilen im Editor und Text in Popups und Dialogen ist nicht benutzerkonfigurierbar.

Start und Codeausführung

Beim Start mit der Option -s führt IDLE die Datei aus, auf die durch die Umgebungsvariablen IDLESTARTUP oder PYTHONSTARTUP verwiesen wird. IDLE prüft zuerst auf IDLESTARTUP; wenn IDLESTARTUP vorhanden ist, wird die referenzierte Datei ausgeführt. Wenn IDLESTARTUP nicht vorhanden ist, prüft IDLE auf PYTHONSTARTUP. Dateien, auf die in diesen Umgebungsvariablen verwiesen wird, sind praktische Orte, um häufig verwendete Funktionen aus der IDLE-Shell zu speichern oder Importanweisungen auszuführen, um gängige Module zu importieren.

Zusätzlich lädt Tk auch eine Startdatei, wenn diese vorhanden ist. Beachten Sie, dass die Tk-Datei bedingungslos geladen wird. Diese zusätzliche Datei ist .Idle.py und wird im Home-Verzeichnis des Benutzers gesucht. Anweisungen in dieser Datei werden im Tk-Namensraum ausgeführt, daher ist diese Datei nicht nützlich zum Importieren von Funktionen, die aus der Python-Shell von IDLE verwendet werden sollen.

Befehlszeilenverwendung

IDLE kann mit verschiedenen Optionen über die Befehlszeile aufgerufen werden. Die allgemeine Syntax lautet

python -m idlelib [options] [file ...]

Folgende Optionen sind verfügbar

-c <command>

Führt den angegebenen Python-Befehl im Shell-Fenster aus. Übergeben Sie beispielsweise -c "print('Hallo, Welt!')". Unter Windows müssen die äußeren Anführungszeichen doppelte Anführungszeichen sein, wie gezeigt.

-d

Aktiviert den Debugger und öffnet das Shell-Fenster.

-e

Öffnet ein Editorfenster.

-h

Gibt eine Hilfemeldung mit gültigen Optionskombinationen aus und beendet das Programm.

-i

Öffnet ein Shell-Fenster.

-r <file>

Führt die angegebene Datei im Shell-Fenster aus.

-s

Führt die Startdatei aus (definiert durch die Umgebungsvariablen IDLESTARTUP oder PYTHONSTARTUP), bevor das Shell-Fenster geöffnet wird.

-t <title>

Setzt den Titel des Shell-Fensters.

-

Liest und führt die Standardeingabe im Shell-Fenster aus. Diese Option muss die letzte sein, bevor beliebige Argumente folgen.

Wenn Argumente angegeben sind

  • Wenn -, -c oder -r verwendet wird, werden alle Argumente in sys.argv[1:] platziert und sys.argv[0] wird entsprechend auf '', '-c' oder '-r' gesetzt. Es wird kein Editorfenster geöffnet, auch wenn dies der Standard in der Optionen-Dialog ist.

  • Andernfalls werden Argumente als zu öffnende Dateien für die Bearbeitung behandelt und sys.argv spiegelt die an IDLE selbst übergebenen Argumente wider.

Startup-Fehler

IDLE verwendet einen Socket, um zwischen dem IDLE-GUI-Prozess und dem Benutzer-Code-Ausführungsprozess zu kommunizieren. Eine Verbindung muss jedes Mal hergestellt werden, wenn die Shell gestartet oder neu gestartet wird (Letzteres wird durch eine Trennlinie mit der Aufschrift „RESTART“ angezeigt). Wenn der Benutzerprozess keine Verbindung zum GUI-Prozess herstellen kann, wird normalerweise ein Tk-Fehlerfenster mit der Meldung „cannot connect“ angezeigt, das den Benutzer hierher leitet. Anschließend wird das Programm beendet.

Ein spezifischer Verbindungsfehler unter Unix-Systemen resultiert aus falsch konfigurierten Masquerading-Regeln irgendwo in der Netzwerkkonfiguration des Systems. Wenn IDLE von einem Terminal aus gestartet wird, sieht man eine Meldung, die mit ** Invalid host: beginnt. Der gültige Wert ist 127.0.0.1 (idlelib.rpc.LOCALHOST). Man kann dies mit tcpconnect -irv 127.0.0.1 6543 in einem Terminalfenster und tcplisten <gleiche Args> in einem anderen diagnostizieren.

Eine häufige Ursache für Fehler ist eine vom Benutzer erstellte Datei mit demselben Namen wie ein Standardbibliotheksmodul, z. B. random.py und tkinter.py. Wenn sich eine solche Datei im selben Verzeichnis befindet wie eine Datei, die gerade ausgeführt wird, kann IDLE die stdlib-Datei nicht importieren. Die aktuelle Lösung besteht darin, die Benutzerdatei umzubenennen.

Obwohl seltener als früher, kann ein Antiviren- oder Firewall-Programm die Verbindung unterbinden. Wenn das Programm nicht beigebracht werden kann, die Verbindung zuzulassen, muss es ausgeschaltet werden, damit IDLE funktioniert. Es ist sicher, diese interne Verbindung zuzulassen, da keine Daten auf externen Ports sichtbar sind. Ein ähnliches Problem ist eine Netzwerkkonfigurationsfehler, die Verbindungen blockiert.

Python-Installationsprobleme können gelegentlich IDLE stoppen: Mehrere Versionen können kollidieren oder eine einzelne Installation benötigt Administratorrechte. Wenn man den Konflikt auflöst oder nicht als Administrator ausführen kann oder will, ist es möglicherweise am einfachsten, Python vollständig zu entfernen und neu zu beginnen.

Ein Zombie-Prozess pythonw.exe könnte ein Problem darstellen. Unter Windows verwenden Sie den Task-Manager, um danach zu suchen und ihn zu beenden, falls vorhanden. Manchmal schlägt ein durch einen Programmabsturz oder eine Tastenkombination (Strg-C) initiierter Neustart möglicherweise fehl. Das Schließen des Fehlerfensters oder die Verwendung von „Shell neu starten“ im Shell-Menü kann ein vorübergehendes Problem beheben.

Wenn IDLE startet, versucht es, Benutzerkonfigurationsdateien in ~/.idlerc/ (~ ist das Home-Verzeichnis) zu lesen. Bei Problemen sollte eine Fehlermeldung angezeigt werden. Abgesehen von zufälligen Festplattenfehlern kann dies verhindert werden, indem man die Dateien niemals manuell bearbeitet. Verwenden Sie stattdessen den Konfigurationsdialog unter Optionen. Sobald ein Fehler in einer Benutzerkonfigurationsdatei vorliegt, kann die beste Lösung darin bestehen, diese zu löschen und mit dem Einstellungsdialog neu zu beginnen.

Wenn IDLE ohne Meldung beendet wird und nicht von einer Konsole aus gestartet wurde, versuchen Sie, es von einer Konsole oder einem Terminal aus zu starten (python -m idlelib) und prüfen Sie, ob dies zu einer Fehlermeldung führt.

Auf Unix-basierten Systemen mit Tcl/Tk älter als 8.6.11 (siehe About IDLE) können bestimmte Zeichen bestimmter Schriftarten einen Tk-Fehler mit einer Meldung an das Terminal verursachen. Dies kann passieren, wenn man IDLE startet, um eine Datei mit einem solchen Zeichen zu bearbeiten, oder später, wenn man ein solches Zeichen eingibt. Wenn man Tcl/Tk nicht aktualisieren kann, muss IDLE neu konfiguriert werden, um eine besser funktionierende Schriftart zu verwenden.

Ausführen von Benutzercode

Mit seltenen Ausnahmen ist das Ergebnis der Ausführung von Python-Code mit IDLE dasselbe wie die Ausführung desselben Codes mit der Standardmethode, direkt mit Python in einer Textmodus-Systemkonsole oder einem Terminalfenster. Die unterschiedliche Benutzeroberfläche und Bedienung beeinflussen jedoch gelegentlich sichtbare Ergebnisse. Zum Beispiel beginnt sys.modules mit mehr Einträgen und threading.active_count() gibt 2 statt 1 zurück.

Standardmäßig führt IDLE Benutzercode in einem separaten Betriebssystemprozess aus, anstatt im Benutzeroberflächenprozess, der die Shell und den Editor ausführt. Im Ausführungsprozess ersetzt er sys.stdin, sys.stdout und sys.stderr durch Objekte, die Eingaben von der Shell erhalten und Ausgaben an die Shell senden. Die ursprünglichen Werte in sys.__stdin__, sys.__stdout__ und sys.__stderr__ werden nicht berührt, können aber None sein.

Das Senden der Ausgabe von einem Prozess an ein Textwidget in einem anderen ist langsamer als das Drucken in ein Systemterminal im selben Prozess. Dies hat die größten Auswirkungen beim Drucken mehrerer Argumente, da der String für jedes Argument, jeder Trennzeichen und der Zeilenumbruch separat gesendet werden. Für die Entwicklung ist dies normalerweise kein Problem, aber wenn man schneller in IDLE ausgeben möchte, formatiert und verknüpft man alles, was man gemeinsam anzeigen möchte, und gibt dann einen einzelnen String aus. Sowohl Format-Strings als auch str.join() können helfen, Felder und Zeilen zu kombinieren.

Die Standard-Stream-Ersetzungen von IDLE werden nicht von Unterprozessen übernommen, die im Ausführungsprozess erstellt werden, sei es direkt durch Benutzercode oder durch Module wie multiprocessing. Wenn solche Unterprozesse input von sys.stdin oder print oder write an sys.stdout oder sys.stderr verwenden, sollte IDLE in einem Kommandozeilenfenster gestartet werden. (Unter Windows verwenden Sie python oder py anstelle von pythonw oder pyw.) Der sekundäre Unterprozess wird dann für die Ein- und Ausgabe an dieses Fenster angehängt.

Wenn sys durch Benutzercode zurückgesetzt wird, z. B. durch importlib.reload(sys), gehen die Änderungen von IDLE verloren und die Eingabe von der Tastatur und die Ausgabe auf dem Bildschirm funktionieren nicht mehr richtig.

Wenn die Shell den Fokus hat, kontrolliert sie Tastatur und Bildschirm. Dies ist normalerweise transparent, aber Funktionen, die direkt auf Tastatur und Bildschirm zugreifen, funktionieren nicht. Dazu gehören systemabhängige Funktionen, die feststellen, ob eine Taste gedrückt wurde und wenn ja, welche.

Der IDLE-Code, der im Ausführungsprozess läuft, fügt Frames zum Aufrufstapel hinzu, die sonst nicht vorhanden wären. IDLE umschließt sys.getrecursionlimit und sys.setrecursionlimit, um die Auswirkungen der zusätzlichen Stack-Frames zu reduzieren.

Wenn Benutzercode SystemExit auslöst, entweder direkt oder durch Aufruf von sys.exit, kehrt IDLE zu einem Shell-Prompt zurück, anstatt sich zu beenden.

Benutzerausgabe in der Shell

Wenn ein Programm Text ausgibt, wird das Ergebnis durch das entsprechende Ausgabegerät bestimmt. Wenn IDLE Benutzercode ausführt, werden sys.stdout und sys.stderr mit dem Anzeigebereich der IDLE-Shell verbunden. Einige seiner Funktionen werden vom zugrunde liegenden Tk Text-Widget geerbt. Andere sind programmierte Ergänzungen. Wo es darauf ankommt, ist die Shell für die Entwicklung und nicht für Produktionsläufe konzipiert.

Zum Beispiel verwirft die Shell nie Ausgaben. Ein Programm, das unbegrenzte Ausgaben an die Shell sendet, wird schließlich den Speicher füllen, was zu einem Speicherfehler führt. Im Gegensatz dazu behalten einige Systemtextfenster nur die letzten n Zeilen der Ausgabe. Eine Windows-Konsole behält beispielsweise eine benutzerdefinierbare Anzahl von 1 bis 9999 Zeilen, wobei 300 der Standard ist.

Ein Tk Text-Widget und damit die IDLE-Shell zeigen Zeichen (Codepoints) aus der BMP (Basic Multilingual Plane) Teilmenge von Unicode an. Welche Zeichen mit einer ordnungsgemäßen Glyphe und welche mit einem Ersatzfeld angezeigt werden, hängt vom Betriebssystem und den installierten Schriftarten ab. Tabulatoren bewirken, dass der folgende Text nach dem nächsten Tabstopp beginnt. (Sie treten alle 8 „Zeichen“ auf.) Zeilenumbruchzeichen bewirken, dass der folgende Text in einer neuen Zeile erscheint. Andere Steuerzeichen werden ignoriert oder als Leerzeichen, Box oder etwas anderes angezeigt, je nach Betriebssystem und Schriftart. (Das Bewegen des Textcursors durch eine solche Ausgabe mit den Pfeiltasten kann zu überraschenden Abstandseffekten führen.)

>>> s = 'a\tb\a<\x02><\r>\bc\nd'  # Enter 22 chars.
>>> len(s)
14
>>> s  # Display repr(s)
'a\tb\x07<\x02><\r>\x08c\nd'
>>> print(s, end='')  # Display s as is.
# Result varies by OS and font.  Try it.

Die Funktion repr wird für die interaktive Anzeige von Ausdruckswerten verwendet. Sie gibt eine veränderte Version des Eingabestrings zurück, in der Steuerzeichen, einige BMP-Codepoints und alle Nicht-BMP-Codepoints durch Escape-Codes ersetzt werden. Wie oben gezeigt, ermöglicht sie es, die Zeichen in einem String zu identifizieren, unabhängig davon, wie sie angezeigt werden.

Normale und Fehler-Ausgaben werden im Allgemeinen getrennt (auf separaten Zeilen) von Codeeingaben und voneinander gehalten. Sie erhalten jeweils unterschiedliche Hervorhebungsfarben.

Für SyntaxError-Tracebacks wird das normale „^“-Zeichen, das die Stelle markiert, an der der Fehler erkannt wurde, durch Einfärben des Textes mit einer Fehlerhervorhebung ersetzt. Wenn Code, der aus einer Datei ausgeführt wird, andere Ausnahmen verursacht, kann man mit der rechten Maustaste auf eine Traceback-Zeile klicken, um zur entsprechenden Zeile in einem IDLE-Editor zu springen. Die Datei wird bei Bedarf geöffnet.

Die Shell verfügt über eine spezielle Einrichtung zum Zusammenpressen von Ausgabzeilen zu einem „Squeezed text“-Label. Dies geschieht automatisch für Ausgaben über N Zeilen (N = 50 standardmäßig). N kann im Abschnitt PyShell der Registerkarte Allgemein im Einstellungsdialog geändert werden. Ausgaben mit weniger Zeilen können durch Klicken mit der rechten Maustaste auf die Ausgabe zusammengepresst werden. Dies kann nützlich sein für Zeilen, die lang genug sind, um das Scrollen zu verlangsamen.

Zusammengepresste Ausgabe wird durch Doppelklick auf das Label direkt erweitert. Sie kann auch durch Rechtsklick auf das Label in die Zwischenablage oder ein separates Ansichtsfenster gesendet werden.

Entwicklung von Tkinter-Anwendungen

IDLE unterscheidet sich absichtlich von Standard-Python, um die Entwicklung von Tkinter-Programmen zu erleichtern. Geben Sie import tkinter as tk; root = tk.Tk() in Standard-Python ein, und nichts erscheint. Geben Sie dasselbe in IDLE ein, und ein Tk-Fenster erscheint. In Standard-Python müssen Sie auch root.update() eingeben, um das Fenster zu sehen. IDLE erledigt das Äquivalent im Hintergrund, etwa 20 Mal pro Sekunde, was etwa alle 50 Millisekunden ist. Geben Sie dann b = tk.Button(root, text='button'); b.pack() ein. Wiederum ändert sich in Standard-Python nichts Sichtbares, bis man root.update() eingibt.

Die meisten Tkinter-Programme führen root.mainloop() aus, das normalerweise nicht zurückkehrt, bis die Tk-App zerstört ist. Wenn das Programm mit python -i oder aus einem IDLE-Editor ausgeführt wird, erscheint ein >>> Shell-Prompt erst, wenn mainloop() zurückkehrt, zu welchem Zeitpunkt nichts mehr zur Interaktion übrig ist.

Beim Ausführen eines Tkinter-Programms aus einem IDLE-Editor kann man den Aufruf von mainloop auskommentieren. Man erhält dann sofort einen Shell-Prompt und kann mit der laufenden Anwendung interagieren. Man muss sich nur daran erinnern, den mainloop-Aufruf wieder zu aktivieren, wenn man in Standard-Python ausführt.

Ausführen ohne Subprozess

Standardmäßig führt IDLE Benutzercode in einem separaten Subprozess über einen Socket aus, der die interne Loopback-Schnittstelle verwendet. Diese Verbindung ist nicht extern sichtbar und es werden keine Daten über das Internet gesendet oder empfangen. Wenn Firewall-Software sich trotzdem beschwert, können Sie diese ignorieren.

Wenn der Versuch, die Socket-Verbindung herzustellen, fehlschlägt, wird Idle Sie benachrichtigen. Solche Fehler sind manchmal transient, aber wenn sie hartnäckig sind, kann das Problem entweder eine Firewall sein, die die Verbindung blockiert, oder eine Fehlkonfiguration eines bestimmten Systems. Bis das Problem behoben ist, können Sie Idle mit dem Schalter -n in der Befehlszeile ausführen.

Wenn IDLE mit dem Schalter -n gestartet wird, läuft es in einem einzigen Prozess und erstellt nicht den Subprozess, der den RPC-Python-Ausführungsserver ausführt. Dies kann nützlich sein, wenn Python den Subprozess oder die RPC-Socket-Schnittstelle auf Ihrer Plattform nicht erstellen kann. In diesem Modus ist der Benutzercode jedoch nicht von IDLE selbst isoliert. Außerdem wird die Umgebung nicht neu gestartet, wenn Run/Run Module (F5) ausgewählt wird. Wenn Ihr Code geändert wurde, müssen Sie die betroffenen Module reload() und alle spezifischen Elemente neu importieren (z. B. from foo import baz), damit die Änderungen wirksam werden. Aus diesen Gründen ist es vorzuziehen, IDLE, wenn möglich, mit dem Standard-Subprozess auszuführen.

Veraltet seit Version 3.4.

Hilfe und Einstellungen

Hilfequellen

Der Menüeintrag „IDLE Help“ im Hilfe-Menü zeigt eine formatierte HTML-Version des IDLE-Kapitels des Library Reference an. Das Ergebnis in einem schreibgeschützten Tkinter-Textfenster kommt dem, was man in einem Webbrowser sieht, sehr nahe. Navigieren Sie durch den Text mit einem Mausrad, der Bildlaufleiste oder den gedrückten Pfeiltasten nach oben und unten. Oder klicken Sie auf die Schaltfläche TOC (Inhaltsverzeichnis) und wählen Sie einen Abschnittstitel in der geöffneten Box aus.

Der Menüeintrag „Python Docs“ im Hilfe-Menü öffnet die umfangreichen Hilfsquellen, einschließlich Tutorials, die unter docs.python.org/x.y verfügbar sind, wobei „x.y“ die aktuell laufende Python-Version ist. Wenn Ihr System eine Offline-Kopie der Dokumentation hat (dies kann eine Installationsoption sein), wird diese stattdessen geöffnet.

Ausgewählte URLs können jederzeit über den Reiter Allgemein im Dialog „IDLE konfigurieren“ zum Hilfe-Menü hinzugefügt oder daraus entfernt werden.

Einstellungen vornehmen

Die Schriftarteinstellungen, Hervorhebungen, Tasten und allgemeinen Einstellungen können über „IDLE konfigurieren“ im Optionsmenü geändert werden. Nicht standardmäßige Benutzereinstellungen werden in einem Verzeichnis .idlerc im Home-Verzeichnis des Benutzers gespeichert. Probleme, die durch fehlerhafte Benutzerkonfigurationsdateien verursacht werden, werden durch Bearbeiten oder Löschen einer oder mehrerer Dateien in .idlerc behoben.

Auf der Registerkarte Schriftart sehen Sie im Textbeispiel die Auswirkung von Schriftart und -größe auf mehrere Zeichen in mehreren Sprachen. Bearbeiten Sie das Beispiel, um weitere Zeichen von persönlichem Interesse hinzuzufügen. Verwenden Sie das Beispiel, um Monospace-Schriftarten auszuwählen. Wenn bestimmte Zeichen in der Shell oder einem Editor Probleme bereiten, fügen Sie sie oben in das Beispiel ein und versuchen Sie, zuerst die Größe und dann die Schriftart zu ändern.

Auf den Registerkarten Hervorhebungen und Tasten wählen Sie ein integriertes oder benutzerdefiniertes Farbschema und eine Tastenbelegung aus. Um ein neueres integriertes Farbschema oder eine neuere Tastenbelegung mit älteren IDLEs zu verwenden, speichern Sie es als neues benutzerdefiniertes Schema oder neue benutzerdefinierte Tastenbelegung, und es wird für ältere IDLEs zugänglich sein.

IDLE unter macOS

Unter Systemeinstellungen: Dock können Sie „Bevorzugen Sie Registerkarten beim Öffnen von Dokumenten“ auf „Immer“ setzen. Diese Einstellung ist nicht kompatibel mit dem von IDLE verwendeten Tk/Tkinter-GUI-Framework und bricht einige IDLE-Funktionen.

Erweiterungen

IDLE enthält eine Erweiterungsfunktion. Einstellungen für Erweiterungen können über den Reiter Erweiterungen im Einstellungsdialog geändert werden. Weitere Informationen finden Sie am Anfang von config-extensions.def im Verzeichnis idlelib. Die einzige aktuelle Standarderweiterung ist zzdummy, ein Beispiel, das auch zum Testen verwendet wird.

idlelib — Implementierung der IDLE-Anwendung

Quellcode: Lib/idlelib


Das Paket Lib/idlelib implementiert die IDLE-Anwendung. Weitere Informationen zur Verwendung von IDLE finden Sie auf der restlichen Seite.

Die Dateien in idlelib sind in idlelib/README.txt beschrieben. Greifen Sie darauf entweder in idlelib zu oder klicken Sie auf Hilfe => Über IDLE im IDLE-Menü. Diese Datei ordnet auch IDLE-Menüeinträge dem Code zu, der den Eintrag implementiert. Mit Ausnahme der unter „Startup“ aufgeführten Dateien ist der idlelib-Code „privat“ in dem Sinne, dass Funktionsänderungen zurückportiert werden können (siehe PEP 434).