extend, SYMBIAN NOKIA N95
[ Pobierz całość w formacie PDF ]
Writing an IDLE extension=========================An IDLE extension can define new key bindings and menu entries for IDLEedit windows. There is a simple mechanism to load extensions when IDLEstarts up and to attach them to each edit window. (It is also possibleto make other changes to IDLE, but this must be done by editing the IDLEsource code.)The list of extensions loaded at startup time is configured by editingthe file config-extensions.def. See below for details.An IDLE extension is defined by a class. Methods of the class defineactions that are invoked by event bindings or menu entries. Class (orinstance) variables define the bindings and menu additions; these areautomatically applied by IDLE when the extension is linked to an editwindow.An IDLE extension class is instantiated with a single argument,`editwin', an EditorWindow instance. The extension cannot assume muchabout this argument, but it is guarateed to have the following instancevariables:text a Text instance (a widget)io an IOBinding instance (more about this later)flist the FileList instance (shared by all edit windows)(There are a few more, but they are rarely useful.)The extension class must not directly bind Window Manager (e.g. X) events.Rather, it must define one or more virtual events, e.g. <<zoom-height>>, andcorresponding methods, e.g. zoom_height_event(). The virtual events will bebound to the corresponding methods, and Window Manager events can then be boundto the virtual events. (This indirection is done so that the key bindings caneasily be changed, and so that other sources of virtual events can exist, suchas menu entries.)An extension can define menu entries. This is done with a class or instancevariable named menudefs; it should be a list of pairs, where each pair is amenu name (lowercase) and a list of menu entries. Each menu entry is eitherNone (to insert a separator entry) or a pair of strings (menu_label,virtual_event). Here, menu_label is the label of the menu entry, andvirtual_event is the virtual event to be generated when the entry is selected.An underscore in the menu label is removed; the character following theunderscore is displayed underlined, to indicate the shortcut character (forWindows).At the moment, extensions cannot define whole new menus; they must defineentries in existing menus. Some menus are not present on some windows; suchentry definitions are then ignored, but key bindings are still applied. (Thisshould probably be refined in the future.)Extensions are not required to define menu entries for all the events theyimplement. (They are also not required to create keybindings, but in thatcase there must be empty bindings in cofig-extensions.def)Here is a complete example example:class ZoomHeight:menudefs = [('edit', [None, # Separator('_Zoom Height', '<<zoom-height>>'),])]def __init__(self, editwin):self.editwin = editwindef zoom_height_event(self, event):"...Do what you want here..."The final piece of the puzzle is the file "config-extensions.def", which isused to to configure the loading of extensions and to establish key (or, moregenerally, event) bindings to the virtual events defined in the extensions.See the comments at the top of config-extensions.def for information. It'scurrently necessary to manually modify that file to change IDLE's extensionloading or extension key bindings.For further information on binding refer to the Tkinter Resources web page atpython.org and to the Tk Command "bind" man page.
[ Pobierz całość w formacie PDF ]