Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/python3.8/idlelib/extend.txt @ 68:5028fdace37b
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 16:23:26 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 68:5028fdace37b |
---|---|
1 Writing an IDLE extension | |
2 ========================= | |
3 | |
4 An IDLE extension can define new key bindings and menu entries for IDLE | |
5 edit windows. There is a simple mechanism to load extensions when IDLE | |
6 starts up and to attach them to each edit window. (It is also possible | |
7 to make other changes to IDLE, but this must be done by editing the IDLE | |
8 source code.) | |
9 | |
10 The list of extensions loaded at startup time is configured by editing | |
11 the file config-extensions.def. See below for details. | |
12 | |
13 An IDLE extension is defined by a class. Methods of the class define | |
14 actions that are invoked by event bindings or menu entries. Class (or | |
15 instance) variables define the bindings and menu additions; these are | |
16 automatically applied by IDLE when the extension is linked to an edit | |
17 window. | |
18 | |
19 An IDLE extension class is instantiated with a single argument, | |
20 `editwin', an EditorWindow instance. The extension cannot assume much | |
21 about this argument, but it is guaranteed to have the following instance | |
22 variables: | |
23 | |
24 text a Text instance (a widget) | |
25 io an IOBinding instance (more about this later) | |
26 flist the FileList instance (shared by all edit windows) | |
27 | |
28 (There are a few more, but they are rarely useful.) | |
29 | |
30 The extension class must not directly bind Window Manager (e.g. X) events. | |
31 Rather, it must define one or more virtual events, e.g. <<zoom-height>>, and | |
32 corresponding methods, e.g. zoom_height_event(). The virtual events will be | |
33 bound to the corresponding methods, and Window Manager events can then be bound | |
34 to the virtual events. (This indirection is done so that the key bindings can | |
35 easily be changed, and so that other sources of virtual events can exist, such | |
36 as menu entries.) | |
37 | |
38 An extension can define menu entries. This is done with a class or instance | |
39 variable named menudefs; it should be a list of pairs, where each pair is a | |
40 menu name (lowercase) and a list of menu entries. Each menu entry is either | |
41 None (to insert a separator entry) or a pair of strings (menu_label, | |
42 virtual_event). Here, menu_label is the label of the menu entry, and | |
43 virtual_event is the virtual event to be generated when the entry is selected. | |
44 An underscore in the menu label is removed; the character following the | |
45 underscore is displayed underlined, to indicate the shortcut character (for | |
46 Windows). | |
47 | |
48 At the moment, extensions cannot define whole new menus; they must define | |
49 entries in existing menus. Some menus are not present on some windows; such | |
50 entry definitions are then ignored, but key bindings are still applied. (This | |
51 should probably be refined in the future.) | |
52 | |
53 Extensions are not required to define menu entries for all the events they | |
54 implement. (They are also not required to create keybindings, but in that | |
55 case there must be empty bindings in cofig-extensions.def) | |
56 | |
57 Here is a complete example: | |
58 | |
59 class ZoomHeight: | |
60 | |
61 menudefs = [ | |
62 ('edit', [ | |
63 None, # Separator | |
64 ('_Zoom Height', '<<zoom-height>>'), | |
65 ]) | |
66 ] | |
67 | |
68 def __init__(self, editwin): | |
69 self.editwin = editwin | |
70 | |
71 def zoom_height_event(self, event): | |
72 "...Do what you want here..." | |
73 | |
74 The final piece of the puzzle is the file "config-extensions.def", which is | |
75 used to configure the loading of extensions and to establish key (or, more | |
76 generally, event) bindings to the virtual events defined in the extensions. | |
77 | |
78 See the comments at the top of config-extensions.def for information. It's | |
79 currently necessary to manually modify that file to change IDLE's extension | |
80 loading or extension key bindings. | |
81 | |
82 For further information on binding refer to the Tkinter Resources web page at | |
83 python.org and to the Tk Command "bind" man page. |