jpayne@68: jpayne@68:
jpayne@68:

IDLE

jpayne@68:

Source code: Lib/idlelib/

jpayne@68:
jpayne@68:

IDLE is Python’s Integrated Development and Learning Environment.

jpayne@68:

IDLE has the following features:

jpayne@68:
    jpayne@68:
  • coded in 100% pure Python, using the tkinter GUI toolkit

  • jpayne@68:
  • cross-platform: works mostly the same on Windows, Unix, and macOS

  • jpayne@68:
  • Python shell window (interactive interpreter) with colorizing jpayne@68: of code input, output, and error messages

  • jpayne@68:
  • multi-window text editor with multiple undo, Python colorizing, jpayne@68: smart indent, call tips, auto completion, and other features

  • jpayne@68:
  • search within any window, replace within editor windows, and search jpayne@68: through multiple files (grep)

  • jpayne@68:
  • debugger with persistent breakpoints, stepping, and viewing jpayne@68: of global and local namespaces

  • jpayne@68:
  • configuration, browsers, and other dialogs

  • jpayne@68:
jpayne@68: jpayne@68:
jpayne@68:

Editing and navigation

jpayne@68:
jpayne@68:

Editor windows

jpayne@68:

IDLE may open editor windows when it starts, depending on settings jpayne@68: and how you start IDLE. Thereafter, use the File menu. There can be only jpayne@68: one open editor window for a given file.

jpayne@68:

The title bar contains the name of the file, the full path, and the version jpayne@68: of Python and IDLE running the window. The status bar contains the line jpayne@68: number (‘Ln’) and column number (‘Col’). Line numbers start with 1; jpayne@68: column numbers with 0.

jpayne@68:

IDLE assumes that files with a known .py* extension contain Python code jpayne@68: and that other files do not. Run Python code with the Run menu.

jpayne@68:
jpayne@68:
jpayne@68:

Key bindings

jpayne@68:

In this section, ‘C’ refers to the Control key on Windows and Unix and jpayne@68: the Command key on macOS.

jpayne@68:
    jpayne@68:
  • Backspace deletes to the left; Del deletes to the right

  • jpayne@68:
  • C-Backspace delete word left; C-Del delete word to the right

  • jpayne@68:
  • Arrow keys and Page Up/Page Down to move around

  • jpayne@68:
  • C-LeftArrow and C-RightArrow moves by words

  • jpayne@68:
  • Home/End go to begin/end of line

  • jpayne@68:
  • C-Home/C-End go to begin/end of file

  • jpayne@68:
  • Some useful Emacs bindings are inherited from Tcl/Tk:

    jpayne@68:
    jpayne@68:
      jpayne@68:
    • C-a beginning of line

    • jpayne@68:
    • C-e end of line

    • jpayne@68:
    • C-k kill line (but doesn’t put it in clipboard)

    • jpayne@68:
    • C-l center window around the insertion point

    • jpayne@68:
    • C-b go backward one character without deleting (usually you can jpayne@68: also use the cursor key for this)

    • jpayne@68:
    • C-f go forward one character without deleting (usually you can jpayne@68: also use the cursor key for this)

    • jpayne@68:
    • C-p go up one line (usually you can also use the cursor key for jpayne@68: this)

    • jpayne@68:
    • C-d delete next character

    • jpayne@68:
    jpayne@68:
    jpayne@68:
  • jpayne@68:
jpayne@68:

Standard keybindings (like C-c to copy and C-v to paste) jpayne@68: may work. Keybindings are selected in the Configure IDLE dialog.

jpayne@68:
jpayne@68:
jpayne@68:

Automatic indentation

jpayne@68:

After a block-opening statement, the next line is indented by 4 spaces (in the jpayne@68: Python Shell window by one tab). After certain keywords (break, return etc.) jpayne@68: the next line is dedented. In leading indentation, Backspace deletes up jpayne@68: to 4 spaces if they are there. Tab inserts spaces (in the Python jpayne@68: Shell window one tab), number depends on Indent width. Currently, tabs jpayne@68: are restricted to four spaces due to Tcl/Tk limitations.

jpayne@68:

See also the indent/dedent region commands on the jpayne@68: Format menu.

jpayne@68:
jpayne@68:
jpayne@68:

Completions

jpayne@68:

Completions are supplied for functions, classes, and attributes of classes, jpayne@68: both built-in and user-defined. Completions are also provided for jpayne@68: filenames.

jpayne@68:

The AutoCompleteWindow (ACW) will open after a predefined delay (default is jpayne@68: two seconds) after a ‘.’ or (in a string) an os.sep is typed. If after one jpayne@68: of those characters (plus zero or more other characters) a tab is typed jpayne@68: the ACW will open immediately if a possible continuation is found.

jpayne@68:

If there is only one possible completion for the characters entered, a jpayne@68: Tab will supply that completion without opening the ACW.

jpayne@68:

‘Show Completions’ will force open a completions window, by default the jpayne@68: C-space will open a completions window. In an empty jpayne@68: string, this will contain the files in the current directory. On a jpayne@68: blank line, it will contain the built-in and user-defined functions and jpayne@68: classes in the current namespaces, plus any modules imported. If some jpayne@68: characters have been entered, the ACW will attempt to be more specific.

jpayne@68:

If a string of characters is typed, the ACW selection will jump to the jpayne@68: entry most closely matching those characters. Entering a tab will jpayne@68: cause the longest non-ambiguous match to be entered in the Editor window or jpayne@68: Shell. Two tab in a row will supply the current ACW selection, as jpayne@68: will return or a double click. Cursor keys, Page Up/Down, mouse selection, jpayne@68: and the scroll wheel all operate on the ACW.

jpayne@68:

“Hidden” attributes can be accessed by typing the beginning of hidden jpayne@68: name after a ‘.’, e.g. ‘_’. This allows access to modules with jpayne@68: __all__ set, or to class-private attributes.

jpayne@68:

Completions and the ‘Expand Word’ facility can save a lot of typing!

jpayne@68:

Completions are currently limited to those in the namespaces. Names in jpayne@68: an Editor window which are not via __main__ and sys.modules will jpayne@68: not be found. Run the module once with your imports to correct this situation. jpayne@68: Note that IDLE itself places quite a few modules in sys.modules, so jpayne@68: much can be found by default, e.g. the re module.

jpayne@68:

If you don’t like the ACW popping up unbidden, simply make the delay jpayne@68: longer or disable the extension.

jpayne@68:
jpayne@68:
jpayne@68:

Calltips

jpayne@68:

A calltip is shown when one types ( after the name of an accessible jpayne@68: function. A name expression may include dots and subscripts. A calltip jpayne@68: remains until it is clicked, the cursor is moved out of the argument area, jpayne@68: or ) is typed. When the cursor is in the argument part of a definition, jpayne@68: the menu or shortcut display a calltip.

jpayne@68:

A calltip consists of the function signature and the first line of the jpayne@68: docstring. For builtins without an accessible signature, the calltip jpayne@68: consists of all lines up the fifth line or the first blank line. These jpayne@68: details may change.

jpayne@68:

The set of accessible functions depends on what modules have been imported jpayne@68: into the user process, including those imported by Idle itself, jpayne@68: and what definitions have been run, all since the last restart.

jpayne@68:

For example, restart the Shell and enter itertools.count(. A calltip jpayne@68: appears because Idle imports itertools into the user process for its own use. jpayne@68: (This could change.) Enter turtle.write( and nothing appears. Idle does jpayne@68: not import turtle. The menu or shortcut do nothing either. Enter jpayne@68: import turtle and then turtle.write( will work.

jpayne@68:

In an editor, import statements have no effect until one runs the file. One jpayne@68: might want to run a file after writing the import statements at the top, jpayne@68: or immediately run an existing file before editing.

jpayne@68:
jpayne@68:
jpayne@68:

Code Context

jpayne@68:

Within an editor window containing Python code, code context can be toggled jpayne@68: in order to show or hide a pane at the top of the window. When shown, this jpayne@68: pane freezes the opening lines for block code, such as those beginning with jpayne@68: class, def, or if keywords, that would have otherwise scrolled jpayne@68: out of view. The size of the pane will be expanded and contracted as needed jpayne@68: to show the all current levels of context, up to the maximum number of jpayne@68: lines defined in the Configure IDLE dialog (which defaults to 15). If there jpayne@68: are no current context lines and the feature is toggled on, a single blank jpayne@68: line will display. Clicking on a line in the context pane will move that jpayne@68: line to the top of the editor.

jpayne@68:

The text and background colors for the context pane can be configured under jpayne@68: the Highlights tab in the Configure IDLE dialog.

jpayne@68:
jpayne@68:
jpayne@68:

Python Shell window

jpayne@68:

With IDLE’s Shell, one enters, edits, and recalls complete statements. jpayne@68: Most consoles and terminals only work with a single physical line at a time.

jpayne@68:

When one pastes code into Shell, it is not compiled and possibly executed jpayne@68: until one hits Return. One may edit pasted code first. jpayne@68: If one pastes more that one statement into Shell, the result will be a jpayne@68: SyntaxError when multiple statements are compiled as if they were one.

jpayne@68:

The editing features described in previous subsections work when entering jpayne@68: code interactively. IDLE’s Shell window also responds to the following keys.

jpayne@68:
    jpayne@68:
  • C-c interrupts executing command

  • jpayne@68:
  • C-d sends end-of-file; closes window if typed at a >>> prompt

  • jpayne@68:
  • Alt-/ (Expand word) is also useful to reduce typing

    jpayne@68:

    Command history

    jpayne@68:
      jpayne@68:
    • Alt-p retrieves previous command matching what you have typed. On jpayne@68: macOS use C-p.

    • jpayne@68:
    • Alt-n retrieves next. On macOS use C-n.

    • jpayne@68:
    • Return while on any previous command retrieves that command

    • jpayne@68:
    jpayne@68:
  • jpayne@68:
jpayne@68:
jpayne@68:
jpayne@68:

Text colors

jpayne@68:

Idle defaults to black on white text, but colors text with special meanings. jpayne@68: For the shell, these are shell output, shell error, user output, and jpayne@68: user error. For Python code, at the shell prompt or in an editor, these are jpayne@68: keywords, builtin class and function names, names following class and jpayne@68: def, strings, and comments. For any text window, these are the cursor (when jpayne@68: present), found text (when possible), and selected text.

jpayne@68:

Text coloring is done in the background, so uncolorized text is occasionally jpayne@68: visible. To change the color scheme, use the Configure IDLE dialog jpayne@68: Highlighting tab. The marking of debugger breakpoint lines in the editor and jpayne@68: text in popups and dialogs is not user-configurable.

jpayne@68:
jpayne@68:
jpayne@68:
jpayne@68:

Startup and code execution

jpayne@68:

Upon startup with the -s option, IDLE will execute the file referenced by jpayne@68: the environment variables IDLESTARTUP or PYTHONSTARTUP. jpayne@68: IDLE first checks for IDLESTARTUP; if IDLESTARTUP is present the file jpayne@68: referenced is run. If IDLESTARTUP is not present, IDLE checks for jpayne@68: PYTHONSTARTUP. Files referenced by these environment variables are jpayne@68: convenient places to store functions that are used frequently from the IDLE jpayne@68: shell, or for executing import statements to import common modules.

jpayne@68:

In addition, Tk also loads a startup file if it is present. Note that the jpayne@68: Tk file is loaded unconditionally. This additional file is .Idle.py and is jpayne@68: looked for in the user’s home directory. Statements in this file will be jpayne@68: executed in the Tk namespace, so this file is not useful for importing jpayne@68: functions to be used from IDLE’s Python shell.

jpayne@68:
jpayne@68:

Command line usage

jpayne@68:
idle.py [-c command] [-d] [-e] [-h] [-i] [-r file] [-s] [-t title] [-] [arg] ...
jpayne@68: 
jpayne@68: -c command  run command in the shell window
jpayne@68: -d          enable debugger and open shell window
jpayne@68: -e          open editor window
jpayne@68: -h          print help message with legal combinations and exit
jpayne@68: -i          open shell window
jpayne@68: -r file     run file in shell window
jpayne@68: -s          run $IDLESTARTUP or $PYTHONSTARTUP first, in shell window
jpayne@68: -t title    set title of shell window
jpayne@68: -           run stdin in shell (- must be last option before args)
jpayne@68: 
jpayne@68:
jpayne@68:

If there are arguments:

jpayne@68:
    jpayne@68:
  • If -, -c, or r is used, all arguments are placed in jpayne@68: sys.argv[1:...] and sys.argv[0] is set to '', '-c', jpayne@68: or '-r'. No editor window is opened, even if that is the default jpayne@68: set in the Options dialog.

  • jpayne@68:
  • Otherwise, arguments are files opened for editing and jpayne@68: sys.argv reflects the arguments passed to IDLE itself.

  • jpayne@68:
jpayne@68:
jpayne@68:
jpayne@68:

Startup failure

jpayne@68:

IDLE uses a socket to communicate between the IDLE GUI process and the user jpayne@68: code execution process. A connection must be established whenever the Shell jpayne@68: starts or restarts. (The latter is indicated by a divider line that says jpayne@68: ‘RESTART’). If the user process fails to connect to the GUI process, it jpayne@68: displays a Tk error box with a ‘cannot connect’ message that directs the jpayne@68: user here. It then exits.

jpayne@68:

A common cause of failure is a user-written file with the same name as a jpayne@68: standard library module, such as random.py and tkinter.py. When such a jpayne@68: file is located in the same directory as a file that is about to be run, jpayne@68: IDLE cannot import the stdlib file. The current fix is to rename the jpayne@68: user file.

jpayne@68:

Though less common than in the past, an antivirus or firewall program may jpayne@68: stop the connection. If the program cannot be taught to allow the jpayne@68: connection, then it must be turned off for IDLE to work. It is safe to jpayne@68: allow this internal connection because no data is visible on external jpayne@68: ports. A similar problem is a network mis-configuration that blocks jpayne@68: connections.

jpayne@68:

Python installation issues occasionally stop IDLE: multiple versions can jpayne@68: clash, or a single installation might need admin access. If one undo the jpayne@68: clash, or cannot or does not want to run as admin, it might be easiest to jpayne@68: completely remove Python and start over.

jpayne@68:

A zombie pythonw.exe process could be a problem. On Windows, use Task jpayne@68: Manager to detect and stop one. Sometimes a restart initiated by a program jpayne@68: crash or Keyboard Interrupt (control-C) may fail to connect. Dismissing jpayne@68: the error box or Restart Shell on the Shell menu may fix a temporary problem.

jpayne@68:

When IDLE first starts, it attempts to read user configuration files in jpayne@68: ~/.idlerc/ (~ is one’s home directory). If there is a problem, an error jpayne@68: message should be displayed. Leaving aside random disk glitches, this can jpayne@68: be prevented by never editing the files by hand, using the configuration jpayne@68: dialog, under Options, instead Options. Once it happens, the solution may jpayne@68: be to delete one or more of the configuration files.

jpayne@68:

If IDLE quits with no message, and it was not started from a console, try jpayne@68: starting from a console (python -m idlelib) and see if a message appears.

jpayne@68:
jpayne@68:
jpayne@68:

Running user code

jpayne@68:

With rare exceptions, the result of executing Python code with IDLE is jpayne@68: intended to be the same as executing the same code by the default method, jpayne@68: directly with Python in a text-mode system console or terminal window. jpayne@68: However, the different interface and operation occasionally affect jpayne@68: visible results. For instance, sys.modules starts with more entries, jpayne@68: and threading.activeCount() returns 2 instead of 1.

jpayne@68:

By default, IDLE runs user code in a separate OS process rather than in jpayne@68: the user interface process that runs the shell and editor. In the execution jpayne@68: process, it replaces sys.stdin, sys.stdout, and sys.stderr jpayne@68: with objects that get input from and send output to the Shell window. jpayne@68: The original values stored in sys.__stdin__, sys.__stdout__, and jpayne@68: sys.__stderr__ are not touched, but may be None.

jpayne@68:

When Shell has the focus, it controls the keyboard and screen. This is jpayne@68: normally transparent, but functions that directly access the keyboard jpayne@68: and screen will not work. These include system-specific functions that jpayne@68: determine whether a key has been pressed and if so, which.

jpayne@68:

IDLE’s standard stream replacements are not inherited by subprocesses jpayne@68: created in the execution process, whether directly by user code or by modules jpayne@68: such as multiprocessing. If such subprocess use input from sys.stdin jpayne@68: or print or write to sys.stdout or sys.stderr, jpayne@68: IDLE should be started in a command line window. The secondary subprocess jpayne@68: will then be attached to that window for input and output.

jpayne@68:

The IDLE code running in the execution process adds frames to the call stack jpayne@68: that would not be there otherwise. IDLE wraps sys.getrecursionlimit and jpayne@68: sys.setrecursionlimit to reduce the effect of the additional stack frames.

jpayne@68:

If sys is reset by user code, such as with importlib.reload(sys), jpayne@68: IDLE’s changes are lost and input from the keyboard and output to the screen jpayne@68: will not work correctly.

jpayne@68:

When user code raises SystemExit either directly or by calling sys.exit, IDLE jpayne@68: returns to a Shell prompt instead of exiting.

jpayne@68:
jpayne@68:
jpayne@68:

User output in Shell

jpayne@68:

When a program outputs text, the result is determined by the jpayne@68: corresponding output device. When IDLE executes user code, sys.stdout jpayne@68: and sys.stderr are connected to the display area of IDLE’s Shell. Some of jpayne@68: its features are inherited from the underlying Tk Text widget. Others jpayne@68: are programmed additions. Where it matters, Shell is designed for development jpayne@68: rather than production runs.

jpayne@68:

For instance, Shell never throws away output. A program that sends unlimited jpayne@68: output to Shell will eventually fill memory, resulting in a memory error. jpayne@68: In contrast, some system text windows only keep the last n lines of output. jpayne@68: A Windows console, for instance, keeps a user-settable 1 to 9999 lines, jpayne@68: with 300 the default.

jpayne@68:

A Tk Text widget, and hence IDLE’s Shell, displays characters (codepoints) in jpayne@68: the BMP (Basic Multilingual Plane) subset of Unicode. Which characters are jpayne@68: displayed with a proper glyph and which with a replacement box depends on the jpayne@68: operating system and installed fonts. Tab characters cause the following text jpayne@68: to begin after the next tab stop. (They occur every 8 ‘characters’). Newline jpayne@68: characters cause following text to appear on a new line. Other control jpayne@68: characters are ignored or displayed as a space, box, or something else, jpayne@68: depending on the operating system and font. (Moving the text cursor through jpayne@68: such output with arrow keys may exhibit some surprising spacing behavior.)

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

The repr function is used for interactive echo of expression jpayne@68: values. It returns an altered version of the input string in which jpayne@68: control codes, some BMP codepoints, and all non-BMP codepoints are jpayne@68: replaced with escape codes. As demonstrated above, it allows one to jpayne@68: identify the characters in a string, regardless of how they are displayed.

jpayne@68:

Normal and error output are generally kept separate (on separate lines) jpayne@68: from code input and each other. They each get different highlight colors.

jpayne@68:

For SyntaxError tracebacks, the normal ‘^’ marking where the error was jpayne@68: detected is replaced by coloring the text with an error highlight. jpayne@68: When code run from a file causes other exceptions, one may right click jpayne@68: on a traceback line to jump to the corresponding line in an IDLE editor. jpayne@68: The file will be opened if necessary.

jpayne@68:

Shell has a special facility for squeezing output lines down to a jpayne@68: ‘Squeezed text’ label. This is done automatically jpayne@68: for output over N lines (N = 50 by default). jpayne@68: N can be changed in the PyShell section of the General jpayne@68: page of the Settings dialog. Output with fewer lines can be squeezed by jpayne@68: right clicking on the output. This can be useful lines long enough to slow jpayne@68: down scrolling.

jpayne@68:

Squeezed output is expanded in place by double-clicking the label. jpayne@68: It can also be sent to the clipboard or a separate view window by jpayne@68: right-clicking the label.

jpayne@68:
jpayne@68:
jpayne@68:

Developing tkinter applications

jpayne@68:

IDLE is intentionally different from standard Python in order to jpayne@68: facilitate development of tkinter programs. Enter import tkinter as tk; jpayne@68: root = tk.Tk() in standard Python and nothing appears. Enter the same jpayne@68: in IDLE and a tk window appears. In standard Python, one must also enter jpayne@68: root.update() to see the window. IDLE does the equivalent in the jpayne@68: background, about 20 times a second, which is about every 50 milliseconds. jpayne@68: Next enter b = tk.Button(root, text='button'); b.pack(). Again, jpayne@68: nothing visibly changes in standard Python until one enters root.update().

jpayne@68:

Most tkinter programs run root.mainloop(), which usually does not jpayne@68: return until the tk app is destroyed. If the program is run with jpayne@68: python -i or from an IDLE editor, a >>> shell prompt does not jpayne@68: appear until mainloop() returns, at which time there is nothing left jpayne@68: to interact with.

jpayne@68:

When running a tkinter program from an IDLE editor, one can comment out jpayne@68: the mainloop call. One then gets a shell prompt immediately and can jpayne@68: interact with the live application. One just has to remember to jpayne@68: re-enable the mainloop call when running in standard Python.

jpayne@68:
jpayne@68:
jpayne@68:

Running without a subprocess

jpayne@68:

By default, IDLE executes user code in a separate subprocess via a socket, jpayne@68: which uses the internal loopback interface. This connection is not jpayne@68: externally visible and no data is sent to or received from the Internet. jpayne@68: If firewall software complains anyway, you can ignore it.

jpayne@68:

If the attempt to make the socket connection fails, Idle will notify you. jpayne@68: Such failures are sometimes transient, but if persistent, the problem jpayne@68: may be either a firewall blocking the connection or misconfiguration of jpayne@68: a particular system. Until the problem is fixed, one can run Idle with jpayne@68: the -n command line switch.

jpayne@68:

If IDLE is started with the -n command line switch it will run in a jpayne@68: single process and will not create the subprocess which runs the RPC jpayne@68: Python execution server. This can be useful if Python cannot create jpayne@68: the subprocess or the RPC socket interface on your platform. However, jpayne@68: in this mode user code is not isolated from IDLE itself. Also, the jpayne@68: environment is not restarted when Run/Run Module (F5) is selected. If jpayne@68: your code has been modified, you must reload() the affected modules and jpayne@68: re-import any specific items (e.g. from foo import baz) if the changes jpayne@68: are to take effect. For these reasons, it is preferable to run IDLE jpayne@68: with the default subprocess if at all possible.

jpayne@68:
jpayne@68:

Deprecated since version 3.4.

jpayne@68:
jpayne@68:
jpayne@68:
jpayne@68:
jpayne@68:

Help and preferences

jpayne@68:
jpayne@68:

Help sources

jpayne@68:

Help menu entry “IDLE Help” displays a formatted html version of the jpayne@68: IDLE chapter of the Library Reference. The result, in a read-only jpayne@68: tkinter text window, is close to what one sees in a web browser. jpayne@68: Navigate through the text with a mousewheel, jpayne@68: the scrollbar, or up and down arrow keys held down. jpayne@68: Or click the TOC (Table of Contents) button and select a section jpayne@68: header in the opened box.

jpayne@68:

Help menu entry “Python Docs” opens the extensive sources of help, jpayne@68: including tutorials, available at docs.python.org/x.y, where ‘x.y’ jpayne@68: is the currently running Python version. If your system jpayne@68: has an off-line copy of the docs (this may be an installation option), jpayne@68: that will be opened instead.

jpayne@68:

Selected URLs can be added or removed from the help menu at any time using the jpayne@68: General tab of the Configure IDLE dialog .

jpayne@68:
jpayne@68:
jpayne@68:

Setting preferences

jpayne@68:

The font preferences, highlighting, keys, and general preferences can be jpayne@68: changed via Configure IDLE on the Option menu. jpayne@68: Non-default user settings are saved in a .idlerc directory in the user’s jpayne@68: home directory. Problems caused by bad user configuration files are solved jpayne@68: by editing or deleting one or more of the files in .idlerc.

jpayne@68:

On the Font tab, see the text sample for the effect of font face and size jpayne@68: on multiple characters in multiple languages. Edit the sample to add jpayne@68: other characters of personal interest. Use the sample to select jpayne@68: monospaced fonts. If particular characters have problems in Shell or an jpayne@68: editor, add them to the top of the sample and try changing first size jpayne@68: and then font.

jpayne@68:

On the Highlights and Keys tab, select a built-in or custom color theme jpayne@68: and key set. To use a newer built-in color theme or key set with older jpayne@68: IDLEs, save it as a new custom theme or key set and it well be accessible jpayne@68: to older IDLEs.

jpayne@68:
jpayne@68:
jpayne@68:

IDLE on macOS

jpayne@68:

Under System Preferences: Dock, one can set “Prefer tabs when opening jpayne@68: documents” to “Always”. This setting is not compatible with the tk/tkinter jpayne@68: GUI framework used by IDLE, and it breaks a few IDLE features.

jpayne@68:
jpayne@68:
jpayne@68:

Extensions

jpayne@68:

IDLE contains an extension facility. Preferences for extensions can be jpayne@68: changed with the Extensions tab of the preferences dialog. See the jpayne@68: beginning of config-extensions.def in the idlelib directory for further jpayne@68: information. The only current default extension is zzdummy, an example jpayne@68: also used for testing.

jpayne@68:
jpayne@68:
jpayne@68:
jpayne@68: jpayne@68: jpayne@68: