diff options
author | Zachary Ware <zach@python.org> | 2023-05-27 17:34:19 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-27 17:34:19 (GMT) |
commit | a989b73e8ebf869dcc71d06127e8797c92260a0f (patch) | |
tree | fdfddb9a77864b2c0d61451e012bc3181d23faba /Lib/tkinter | |
parent | 86d8f489359b8f6cc15006bdcbd70521ce621fbb (diff) | |
download | cpython-a989b73e8ebf869dcc71d06127e8797c92260a0f.zip cpython-a989b73e8ebf869dcc71d06127e8797c92260a0f.tar.gz cpython-a989b73e8ebf869dcc71d06127e8797c92260a0f.tar.bz2 |
gh-75552: Remove deprecated tkinter.tix module (GH-104902)
Diffstat (limited to 'Lib/tkinter')
-rw-r--r-- | Lib/tkinter/tix.py | 1948 |
1 files changed, 0 insertions, 1948 deletions
diff --git a/Lib/tkinter/tix.py b/Lib/tkinter/tix.py deleted file mode 100644 index ce21826..0000000 --- a/Lib/tkinter/tix.py +++ /dev/null @@ -1,1948 +0,0 @@ -# Tix.py -- Tix widget wrappers. -# -# For Tix, see http://tix.sourceforge.net -# -# - Sudhir Shenoy (sshenoy@gol.com), Dec. 1995. -# based on an idea of Jean-Marc Lugrin (lugrin@ms.com) -# -# NOTE: In order to minimize changes to Tkinter.py, some of the code here -# (TixWidget.__init__) has been taken from Tkinter (Widget.__init__) -# and will break if there are major changes in Tkinter. -# -# The Tix widgets are represented by a class hierarchy in python with proper -# inheritance of base classes. -# -# As a result after creating a 'w = StdButtonBox', I can write -# w.ok['text'] = 'Who Cares' -# or w.ok['bg'] = w['bg'] -# or even w.ok.invoke() -# etc. -# -# Compare the demo tixwidgets.py to the original Tcl program and you will -# appreciate the advantages. -# -# NOTE: This module is deprecated since Python 3.6. - -import os -import warnings -import tkinter -from tkinter import * -from tkinter import _cnfmerge - -warnings.warn( - 'The Tix Tk extension is unmaintained, and the tkinter.tix wrapper module' - ' is deprecated in favor of tkinter.ttk', - DeprecationWarning, - stacklevel=2, - ) - -# Some more constants (for consistency with Tkinter) -WINDOW = 'window' -TEXT = 'text' -STATUS = 'status' -IMMEDIATE = 'immediate' -IMAGE = 'image' -IMAGETEXT = 'imagetext' -BALLOON = 'balloon' -AUTO = 'auto' -ACROSSTOP = 'acrosstop' - -# A few useful constants for the Grid widget -ASCII = 'ascii' -CELL = 'cell' -COLUMN = 'column' -DECREASING = 'decreasing' -INCREASING = 'increasing' -INTEGER = 'integer' -MAIN = 'main' -MAX = 'max' -REAL = 'real' -ROW = 'row' -S_REGION = 's-region' -X_REGION = 'x-region' -Y_REGION = 'y-region' - -# Some constants used by Tkinter dooneevent() -TCL_DONT_WAIT = 1 << 1 -TCL_WINDOW_EVENTS = 1 << 2 -TCL_FILE_EVENTS = 1 << 3 -TCL_TIMER_EVENTS = 1 << 4 -TCL_IDLE_EVENTS = 1 << 5 -TCL_ALL_EVENTS = 0 - -# BEWARE - this is implemented by copying some code from the Widget class -# in Tkinter (to override Widget initialization) and is therefore -# liable to break. - -# Could probably add this to Tkinter.Misc -class tixCommand: - """The tix commands provide access to miscellaneous elements - of Tix's internal state and the Tix application context. - Most of the information manipulated by these commands pertains - to the application as a whole, or to a screen or - display, rather than to a particular window. - - This is a mixin class, assumed to be mixed to Tkinter.Tk - that supports the self.tk.call method. - """ - - def tix_addbitmapdir(self, directory): - """Tix maintains a list of directories under which - the tix_getimage and tix_getbitmap commands will - search for image files. The standard bitmap directory - is $TIX_LIBRARY/bitmaps. The addbitmapdir command - adds directory into this list. By using this - command, the image files of an applications can - also be located using the tix_getimage or tix_getbitmap - command. - """ - return self.tk.call('tix', 'addbitmapdir', directory) - - def tix_cget(self, option): - """Returns the current value of the configuration - option given by option. Option may be any of the - options described in the CONFIGURATION OPTIONS section. - """ - return self.tk.call('tix', 'cget', option) - - def tix_configure(self, cnf=None, **kw): - """Query or modify the configuration options of the Tix application - context. If no option is specified, returns a dictionary all of the - available options. If option is specified with no value, then the - command returns a list describing the one named option (this list - will be identical to the corresponding sublist of the value - returned if no option is specified). If one or more option-value - pairs are specified, then the command modifies the given option(s) - to have the given value(s); in this case the command returns an - empty string. Option may be any of the configuration options. - """ - # Copied from Tkinter.py - if kw: - cnf = _cnfmerge((cnf, kw)) - elif cnf: - cnf = _cnfmerge(cnf) - if cnf is None: - return self._getconfigure('tix', 'configure') - if isinstance(cnf, str): - return self._getconfigure1('tix', 'configure', '-'+cnf) - return self.tk.call(('tix', 'configure') + self._options(cnf)) - - def tix_filedialog(self, dlgclass=None): - """Returns the file selection dialog that may be shared among - different calls from this application. This command will create a - file selection dialog widget when it is called the first time. This - dialog will be returned by all subsequent calls to tix_filedialog. - An optional dlgclass parameter can be passed to specified what type - of file selection dialog widget is desired. Possible options are - tix FileSelectDialog or tixExFileSelectDialog. - """ - if dlgclass is not None: - return self.tk.call('tix', 'filedialog', dlgclass) - else: - return self.tk.call('tix', 'filedialog') - - def tix_getbitmap(self, name): - """Locates a bitmap file of the name name.xpm or name in one of the - bitmap directories (see the tix_addbitmapdir command above). By - using tix_getbitmap, you can avoid hard coding the pathnames of the - bitmap files in your application. When successful, it returns the - complete pathname of the bitmap file, prefixed with the character - '@'. The returned value can be used to configure the -bitmap - option of the TK and Tix widgets. - """ - return self.tk.call('tix', 'getbitmap', name) - - def tix_getimage(self, name): - """Locates an image file of the name name.xpm, name.xbm or name.ppm - in one of the bitmap directories (see the addbitmapdir command - above). If more than one file with the same name (but different - extensions) exist, then the image type is chosen according to the - depth of the X display: xbm images are chosen on monochrome - displays and color images are chosen on color displays. By using - tix_ getimage, you can avoid hard coding the pathnames of the - image files in your application. When successful, this command - returns the name of the newly created image, which can be used to - configure the -image option of the Tk and Tix widgets. - """ - return self.tk.call('tix', 'getimage', name) - - def tix_option_get(self, name): - """Gets the options maintained by the Tix - scheme mechanism. Available options include: - - active_bg active_fg bg - bold_font dark1_bg dark1_fg - dark2_bg dark2_fg disabled_fg - fg fixed_font font - inactive_bg inactive_fg input1_bg - input2_bg italic_font light1_bg - light1_fg light2_bg light2_fg - menu_font output1_bg output2_bg - select_bg select_fg selector - """ - # could use self.tk.globalgetvar('tixOption', name) - return self.tk.call('tix', 'option', 'get', name) - - def tix_resetoptions(self, newScheme, newFontSet, newScmPrio=None): - """Resets the scheme and fontset of the Tix application to - newScheme and newFontSet, respectively. This affects only those - widgets created after this call. Therefore, it is best to call the - resetoptions command before the creation of any widgets in a Tix - application. - - The optional parameter newScmPrio can be given to reset the - priority level of the Tk options set by the Tix schemes. - - Because of the way Tk handles the X option database, after Tix has - been has imported and inited, it is not possible to reset the color - schemes and font sets using the tix config command. Instead, the - tix_resetoptions command must be used. - """ - if newScmPrio is not None: - return self.tk.call('tix', 'resetoptions', newScheme, newFontSet, newScmPrio) - else: - return self.tk.call('tix', 'resetoptions', newScheme, newFontSet) - -class Tk(tkinter.Tk, tixCommand): - """Toplevel widget of Tix which represents mostly the main window - of an application. It has an associated Tcl interpreter.""" - def __init__(self, screenName=None, baseName=None, className='Tix'): - tkinter.Tk.__init__(self, screenName, baseName, className) - tixlib = os.environ.get('TIX_LIBRARY') - self.tk.eval('global auto_path; lappend auto_path [file dir [info nameof]]') - if tixlib is not None: - self.tk.eval('global auto_path; lappend auto_path {%s}' % tixlib) - self.tk.eval('global tcl_pkgPath; lappend tcl_pkgPath {%s}' % tixlib) - # Load Tix - this should work dynamically or statically - # If it's static, tcl/tix8.1/pkgIndex.tcl should have - # 'load {} Tix' - # If it's dynamic under Unix, tcl/tix8.1/pkgIndex.tcl should have - # 'load libtix8.1.8.3.so Tix' - self.tk.eval('package require Tix') - - def destroy(self): - # For safety, remove the delete_window binding before destroy - self.protocol("WM_DELETE_WINDOW", "") - tkinter.Tk.destroy(self) - -# The Tix 'tixForm' geometry manager -class Form: - """The Tix Form geometry manager - - Widgets can be arranged by specifying attachments to other widgets. - See Tix documentation for complete details""" - - def config(self, cnf={}, **kw): - self.tk.call('tixForm', self._w, *self._options(cnf, kw)) - - form = config - - def __setitem__(self, key, value): - Form.form(self, {key: value}) - - def check(self): - return self.tk.call('tixForm', 'check', self._w) - - def forget(self): - self.tk.call('tixForm', 'forget', self._w) - - def grid(self, xsize=0, ysize=0): - if (not xsize) and (not ysize): - x = self.tk.call('tixForm', 'grid', self._w) - y = self.tk.splitlist(x) - z = () - for x in y: - z = z + (self.tk.getint(x),) - return z - return self.tk.call('tixForm', 'grid', self._w, xsize, ysize) - - def info(self, option=None): - if not option: - return self.tk.call('tixForm', 'info', self._w) - if option[0] != '-': - option = '-' + option - return self.tk.call('tixForm', 'info', self._w, option) - - def slaves(self): - return [self._nametowidget(x) for x in - self.tk.splitlist( - self.tk.call( - 'tixForm', 'slaves', self._w))] - - - -tkinter.Widget.__bases__ = tkinter.Widget.__bases__ + (Form,) - -class TixWidget(tkinter.Widget): - """A TixWidget class is used to package all (or most) Tix widgets. - - Widget initialization is extended in two ways: - 1) It is possible to give a list of options which must be part of - the creation command (so called Tix 'static' options). These cannot be - given as a 'config' command later. - 2) It is possible to give the name of an existing TK widget. These are - child widgets created automatically by a Tix mega-widget. The Tk call - to create these widgets is therefore bypassed in TixWidget.__init__ - - Both options are for use by subclasses only. - """ - def __init__ (self, master=None, widgetName=None, - static_options=None, cnf={}, kw={}): - # Merge keywords and dictionary arguments - if kw: - cnf = _cnfmerge((cnf, kw)) - else: - cnf = _cnfmerge(cnf) - - # Move static options into extra. static_options must be - # a list of keywords (or None). - extra=() - - # 'options' is always a static option - if static_options: - static_options.append('options') - else: - static_options = ['options'] - - for k,v in list(cnf.items()): - if k in static_options: - extra = extra + ('-' + k, v) - del cnf[k] - - self.widgetName = widgetName - self._setup(master, cnf) - - # If widgetName is None, this is a dummy creation call where the - # corresponding Tk widget has already been created by Tix - if widgetName: - self.tk.call(widgetName, self._w, *extra) - - # Non-static options - to be done via a 'config' command - if cnf: - Widget.config(self, cnf) - - # Dictionary to hold subwidget names for easier access. We can't - # use the children list because the public Tix names may not be the - # same as the pathname component - self.subwidget_list = {} - - # We set up an attribute access function so that it is possible to - # do w.ok['text'] = 'Hello' rather than w.subwidget('ok')['text'] = 'Hello' - # when w is a StdButtonBox. - # We can even do w.ok.invoke() because w.ok is subclassed from the - # Button class if you go through the proper constructors - def __getattr__(self, name): - if name in self.subwidget_list: - return self.subwidget_list[name] - raise AttributeError(name) - - def set_silent(self, value): - """Set a variable without calling its action routine""" - self.tk.call('tixSetSilent', self._w, value) - - def subwidget(self, name): - """Return the named subwidget (which must have been created by - the sub-class).""" - n = self._subwidget_name(name) - if not n: - raise TclError("Subwidget " + name + " not child of " + self._name) - # Remove header of name and leading dot - n = n[len(self._w)+1:] - return self._nametowidget(n) - - def subwidgets_all(self): - """Return all subwidgets.""" - names = self._subwidget_names() - if not names: - return [] - retlist = [] - for name in names: - name = name[len(self._w)+1:] - try: - retlist.append(self._nametowidget(name)) - except: - # some of the widgets are unknown e.g. border in LabelFrame - pass - return retlist - - def _subwidget_name(self,name): - """Get a subwidget name (returns a String, not a Widget !)""" - try: - return self.tk.call(self._w, 'subwidget', name) - except TclError: - return None - - def _subwidget_names(self): - """Return the name of all subwidgets.""" - try: - x = self.tk.call(self._w, 'subwidgets', '-all') - return self.tk.splitlist(x) - except TclError: - return None - - def config_all(self, option, value): - """Set configuration options for all subwidgets (and self).""" - if option == '': - return - elif not isinstance(option, str): - option = repr(option) - if not isinstance(value, str): - value = repr(value) - names = self._subwidget_names() - for name in names: - self.tk.call(name, 'configure', '-' + option, value) - # These are missing from Tkinter - def image_create(self, imgtype, cnf={}, master=None, **kw): - if master is None: - master = self - if kw and cnf: cnf = _cnfmerge((cnf, kw)) - elif kw: cnf = kw - options = () - for k, v in cnf.items(): - if callable(v): - v = self._register(v) - options = options + ('-'+k, v) - return master.tk.call(('image', 'create', imgtype,) + options) - def image_delete(self, imgname): - try: - self.tk.call('image', 'delete', imgname) - except TclError: - # May happen if the root was destroyed - pass - -# Subwidgets are child widgets created automatically by mega-widgets. -# In python, we have to create these subwidgets manually to mirror their -# existence in Tk/Tix. -class TixSubWidget(TixWidget): - """Subwidget class. - - This is used to mirror child widgets automatically created - by Tix/Tk as part of a mega-widget in Python (which is not informed - of this)""" - - def __init__(self, master, name, - destroy_physically=1, check_intermediate=1): - if check_intermediate: - path = master._subwidget_name(name) - try: - path = path[len(master._w)+1:] - plist = path.split('.') - except: - plist = [] - - if not check_intermediate: - # immediate descendant - TixWidget.__init__(self, master, None, None, {'name' : name}) - else: - # Ensure that the intermediate widgets exist - parent = master - for i in range(len(plist) - 1): - n = '.'.join(plist[:i+1]) - try: - w = master._nametowidget(n) - parent = w - except KeyError: - # Create the intermediate widget - parent = TixSubWidget(parent, plist[i], - destroy_physically=0, - check_intermediate=0) - # The Tk widget name is in plist, not in name - if plist: - name = plist[-1] - TixWidget.__init__(self, parent, None, None, {'name' : name}) - self.destroy_physically = destroy_physically - - def destroy(self): - # For some widgets e.g., a NoteBook, when we call destructors, - # we must be careful not to destroy the frame widget since this - # also destroys the parent NoteBook thus leading to an exception - # in Tkinter when it finally calls Tcl to destroy the NoteBook - for c in list(self.children.values()): c.destroy() - if self._name in self.master.children: - del self.master.children[self._name] - if self._name in self.master.subwidget_list: - del self.master.subwidget_list[self._name] - if self.destroy_physically: - # This is bypassed only for a few widgets - self.tk.call('destroy', self._w) - - -# Useful class to create a display style - later shared by many items. -# Contributed by Steffen Kremser -class DisplayStyle: - """DisplayStyle - handle configuration options shared by - (multiple) Display Items""" - - def __init__(self, itemtype, cnf={}, *, master=None, **kw): - if master is None: - if 'refwindow' in kw: - master = kw['refwindow'] - elif 'refwindow' in cnf: - master = cnf['refwindow'] - else: - master = tkinter._get_default_root('create display style') - self.tk = master.tk - self.stylename = self.tk.call('tixDisplayStyle', itemtype, - *self._options(cnf,kw) ) - - def __str__(self): - return self.stylename - - def _options(self, cnf, kw): - if kw and cnf: - cnf = _cnfmerge((cnf, kw)) - elif kw: - cnf = kw - opts = () - for k, v in cnf.items(): - opts = opts + ('-'+k, v) - return opts - - def delete(self): - self.tk.call(self.stylename, 'delete') - - def __setitem__(self,key,value): - self.tk.call(self.stylename, 'configure', '-%s'%key, value) - - def config(self, cnf={}, **kw): - return self._getconfigure( - self.stylename, 'configure', *self._options(cnf,kw)) - - def __getitem__(self,key): - return self.tk.call(self.stylename, 'cget', '-%s'%key) - - -###################################################### -### The Tix Widget classes - in alphabetical order ### -###################################################### - -class Balloon(TixWidget): - """Balloon help widget. - - Subwidget Class - --------- ----- - label Label - message Message""" - - # FIXME: It should inherit -superclass tixShell - def __init__(self, master=None, cnf={}, **kw): - # static seem to be -installcolormap -initwait -statusbar -cursor - static = ['options', 'installcolormap', 'initwait', 'statusbar', - 'cursor'] - TixWidget.__init__(self, master, 'tixBalloon', static, cnf, kw) - self.subwidget_list['label'] = _dummyLabel(self, 'label', - destroy_physically=0) - self.subwidget_list['message'] = _dummyLabel(self, 'message', - destroy_physically=0) - - def bind_widget(self, widget, cnf={}, **kw): - """Bind balloon widget to another. - One balloon widget may be bound to several widgets at the same time""" - self.tk.call(self._w, 'bind', widget._w, *self._options(cnf, kw)) - - def unbind_widget(self, widget): - self.tk.call(self._w, 'unbind', widget._w) - -class ButtonBox(TixWidget): - """ButtonBox - A container for pushbuttons. - Subwidgets are the buttons added with the add method. - """ - def __init__(self, master=None, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixButtonBox', - ['orientation', 'options'], cnf, kw) - - def add(self, name, cnf={}, **kw): - """Add a button with given name to box.""" - - btn = self.tk.call(self._w, 'add', name, *self._options(cnf, kw)) - self.subwidget_list[name] = _dummyButton(self, name) - return btn - - def invoke(self, name): - if name in self.subwidget_list: - self.tk.call(self._w, 'invoke', name) - -class ComboBox(TixWidget): - """ComboBox - an Entry field with a dropdown menu. The user can select a - choice by either typing in the entry subwidget or selecting from the - listbox subwidget. - - Subwidget Class - --------- ----- - entry Entry - arrow Button - slistbox ScrolledListBox - tick Button - cross Button : present if created with the fancy option""" - - # FIXME: It should inherit -superclass tixLabelWidget - def __init__ (self, master=None, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixComboBox', - ['editable', 'dropdown', 'fancy', 'options'], - cnf, kw) - self.subwidget_list['label'] = _dummyLabel(self, 'label') - self.subwidget_list['entry'] = _dummyEntry(self, 'entry') - self.subwidget_list['arrow'] = _dummyButton(self, 'arrow') - self.subwidget_list['slistbox'] = _dummyScrolledListBox(self, - 'slistbox') - try: - self.subwidget_list['tick'] = _dummyButton(self, 'tick') - self.subwidget_list['cross'] = _dummyButton(self, 'cross') - except TypeError: - # unavailable when -fancy not specified - pass - - # align - - def add_history(self, str): - self.tk.call(self._w, 'addhistory', str) - - def append_history(self, str): - self.tk.call(self._w, 'appendhistory', str) - - def insert(self, index, str): - self.tk.call(self._w, 'insert', index, str) - - def pick(self, index): - self.tk.call(self._w, 'pick', index) - -class Control(TixWidget): - """Control - An entry field with value change arrows. The user can - adjust the value by pressing the two arrow buttons or by entering - the value directly into the entry. The new value will be checked - against the user-defined upper and lower limits. - - Subwidget Class - --------- ----- - incr Button - decr Button - entry Entry - label Label""" - - # FIXME: It should inherit -superclass tixLabelWidget - def __init__ (self, master=None, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixControl', ['options'], cnf, kw) - self.subwidget_list['incr'] = _dummyButton(self, 'incr') - self.subwidget_list['decr'] = _dummyButton(self, 'decr') - self.subwidget_list['label'] = _dummyLabel(self, 'label') - self.subwidget_list['entry'] = _dummyEntry(self, 'entry') - - def decrement(self): - self.tk.call(self._w, 'decr') - - def increment(self): - self.tk.call(self._w, 'incr') - - def invoke(self): - self.tk.call(self._w, 'invoke') - - def update(self): - self.tk.call(self._w, 'update') - -class DirList(TixWidget): - """DirList - displays a list view of a directory, its previous - directories and its sub-directories. The user can choose one of - the directories displayed in the list or change to another directory. - - Subwidget Class - --------- ----- - hlist HList - hsb Scrollbar - vsb Scrollbar""" - - # FIXME: It should inherit -superclass tixScrolledHList - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixDirList', ['options'], cnf, kw) - self.subwidget_list['hlist'] = _dummyHList(self, 'hlist') - self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb') - self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb') - - def chdir(self, dir): - self.tk.call(self._w, 'chdir', dir) - -class DirTree(TixWidget): - """DirTree - Directory Listing in a hierarchical view. - Displays a tree view of a directory, its previous directories and its - sub-directories. The user can choose one of the directories displayed - in the list or change to another directory. - - Subwidget Class - --------- ----- - hlist HList - hsb Scrollbar - vsb Scrollbar""" - - # FIXME: It should inherit -superclass tixScrolledHList - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixDirTree', ['options'], cnf, kw) - self.subwidget_list['hlist'] = _dummyHList(self, 'hlist') - self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb') - self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb') - - def chdir(self, dir): - self.tk.call(self._w, 'chdir', dir) - -class DirSelectBox(TixWidget): - """DirSelectBox - Motif style file select box. - It is generally used for - the user to choose a file. FileSelectBox stores the files mostly - recently selected into a ComboBox widget so that they can be quickly - selected again. - - Subwidget Class - --------- ----- - selection ComboBox - filter ComboBox - dirlist ScrolledListBox - filelist ScrolledListBox""" - - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixDirSelectBox', ['options'], cnf, kw) - self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist') - self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx') - -class ExFileSelectBox(TixWidget): - """ExFileSelectBox - MS Windows style file select box. - It provides a convenient method for the user to select files. - - Subwidget Class - --------- ----- - cancel Button - ok Button - hidden Checkbutton - types ComboBox - dir ComboBox - file ComboBox - dirlist ScrolledListBox - filelist ScrolledListBox""" - - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixExFileSelectBox', ['options'], cnf, kw) - self.subwidget_list['cancel'] = _dummyButton(self, 'cancel') - self.subwidget_list['ok'] = _dummyButton(self, 'ok') - self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden') - self.subwidget_list['types'] = _dummyComboBox(self, 'types') - self.subwidget_list['dir'] = _dummyComboBox(self, 'dir') - self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist') - self.subwidget_list['file'] = _dummyComboBox(self, 'file') - self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist') - - def filter(self): - self.tk.call(self._w, 'filter') - - def invoke(self): - self.tk.call(self._w, 'invoke') - - -# Should inherit from a Dialog class -class DirSelectDialog(TixWidget): - """The DirSelectDialog widget presents the directories in the file - system in a dialog window. The user can use this dialog window to - navigate through the file system to select the desired directory. - - Subwidgets Class - ---------- ----- - dirbox DirSelectDialog""" - - # FIXME: It should inherit -superclass tixDialogShell - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixDirSelectDialog', - ['options'], cnf, kw) - self.subwidget_list['dirbox'] = _dummyDirSelectBox(self, 'dirbox') - # cancel and ok buttons are missing - - def popup(self): - self.tk.call(self._w, 'popup') - - def popdown(self): - self.tk.call(self._w, 'popdown') - - -# Should inherit from a Dialog class -class ExFileSelectDialog(TixWidget): - """ExFileSelectDialog - MS Windows style file select dialog. - It provides a convenient method for the user to select files. - - Subwidgets Class - ---------- ----- - fsbox ExFileSelectBox""" - - # FIXME: It should inherit -superclass tixDialogShell - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixExFileSelectDialog', - ['options'], cnf, kw) - self.subwidget_list['fsbox'] = _dummyExFileSelectBox(self, 'fsbox') - - def popup(self): - self.tk.call(self._w, 'popup') - - def popdown(self): - self.tk.call(self._w, 'popdown') - -class FileSelectBox(TixWidget): - """ExFileSelectBox - Motif style file select box. - It is generally used for - the user to choose a file. FileSelectBox stores the files mostly - recently selected into a ComboBox widget so that they can be quickly - selected again. - - Subwidget Class - --------- ----- - selection ComboBox - filter ComboBox - dirlist ScrolledListBox - filelist ScrolledListBox""" - - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixFileSelectBox', ['options'], cnf, kw) - self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist') - self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist') - self.subwidget_list['filter'] = _dummyComboBox(self, 'filter') - self.subwidget_list['selection'] = _dummyComboBox(self, 'selection') - - def apply_filter(self): # name of subwidget is same as command - self.tk.call(self._w, 'filter') - - def invoke(self): - self.tk.call(self._w, 'invoke') - -# Should inherit from a Dialog class -class FileSelectDialog(TixWidget): - """FileSelectDialog - Motif style file select dialog. - - Subwidgets Class - ---------- ----- - btns StdButtonBox - fsbox FileSelectBox""" - - # FIXME: It should inherit -superclass tixStdDialogShell - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixFileSelectDialog', - ['options'], cnf, kw) - self.subwidget_list['btns'] = _dummyStdButtonBox(self, 'btns') - self.subwidget_list['fsbox'] = _dummyFileSelectBox(self, 'fsbox') - - def popup(self): - self.tk.call(self._w, 'popup') - - def popdown(self): - self.tk.call(self._w, 'popdown') - -class FileEntry(TixWidget): - """FileEntry - Entry field with button that invokes a FileSelectDialog. - The user can type in the filename manually. Alternatively, the user can - press the button widget that sits next to the entry, which will bring - up a file selection dialog. - - Subwidgets Class - ---------- ----- - button Button - entry Entry""" - - # FIXME: It should inherit -superclass tixLabelWidget - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixFileEntry', - ['dialogtype', 'options'], cnf, kw) - self.subwidget_list['button'] = _dummyButton(self, 'button') - self.subwidget_list['entry'] = _dummyEntry(self, 'entry') - - def invoke(self): - self.tk.call(self._w, 'invoke') - - def file_dialog(self): - # FIXME: return python object - pass - -class HList(TixWidget, XView, YView): - """HList - Hierarchy display widget can be used to display any data - that have a hierarchical structure, for example, file system directory - trees. The list entries are indented and connected by branch lines - according to their places in the hierarchy. - - Subwidgets - None""" - - def __init__ (self,master=None,cnf={}, **kw): - TixWidget.__init__(self, master, 'tixHList', - ['columns', 'options'], cnf, kw) - - def add(self, entry, cnf={}, **kw): - return self.tk.call(self._w, 'add', entry, *self._options(cnf, kw)) - - def add_child(self, parent=None, cnf={}, **kw): - if parent is None: - parent = '' - return self.tk.call( - self._w, 'addchild', parent, *self._options(cnf, kw)) - - def anchor_set(self, entry): - self.tk.call(self._w, 'anchor', 'set', entry) - - def anchor_clear(self): - self.tk.call(self._w, 'anchor', 'clear') - - def column_width(self, col=0, width=None, chars=None): - if not chars: - return self.tk.call(self._w, 'column', 'width', col, width) - else: - return self.tk.call(self._w, 'column', 'width', col, - '-char', chars) - - def delete_all(self): - self.tk.call(self._w, 'delete', 'all') - - def delete_entry(self, entry): - self.tk.call(self._w, 'delete', 'entry', entry) - - def delete_offsprings(self, entry): - self.tk.call(self._w, 'delete', 'offsprings', entry) - - def delete_siblings(self, entry): - self.tk.call(self._w, 'delete', 'siblings', entry) - - def dragsite_set(self, index): - self.tk.call(self._w, 'dragsite', 'set', index) - - def dragsite_clear(self): - self.tk.call(self._w, 'dragsite', 'clear') - - def dropsite_set(self, index): - self.tk.call(self._w, 'dropsite', 'set', index) - - def dropsite_clear(self): - self.tk.call(self._w, 'dropsite', 'clear') - - def header_create(self, col, cnf={}, **kw): - self.tk.call(self._w, 'header', 'create', col, *self._options(cnf, kw)) - - def header_configure(self, col, cnf={}, **kw): - if cnf is None: - return self._getconfigure(self._w, 'header', 'configure', col) - self.tk.call(self._w, 'header', 'configure', col, - *self._options(cnf, kw)) - - def header_cget(self, col, opt): - return self.tk.call(self._w, 'header', 'cget', col, opt) - - def header_exists(self, col): - # A workaround to Tix library bug (issue #25464). - # The documented command is "exists", but only erroneous "exist" is - # accepted. - return self.tk.getboolean(self.tk.call(self._w, 'header', 'exist', col)) - header_exist = header_exists - - def header_delete(self, col): - self.tk.call(self._w, 'header', 'delete', col) - - def header_size(self, col): - return self.tk.call(self._w, 'header', 'size', col) - - def hide_entry(self, entry): - self.tk.call(self._w, 'hide', 'entry', entry) - - def indicator_create(self, entry, cnf={}, **kw): - self.tk.call( - self._w, 'indicator', 'create', entry, *self._options(cnf, kw)) - - def indicator_configure(self, entry, cnf={}, **kw): - if cnf is None: - return self._getconfigure( - self._w, 'indicator', 'configure', entry) - self.tk.call( - self._w, 'indicator', 'configure', entry, *self._options(cnf, kw)) - - def indicator_cget(self, entry, opt): - return self.tk.call(self._w, 'indicator', 'cget', entry, opt) - - def indicator_exists(self, entry): - return self.tk.call (self._w, 'indicator', 'exists', entry) - - def indicator_delete(self, entry): - self.tk.call(self._w, 'indicator', 'delete', entry) - - def indicator_size(self, entry): - return self.tk.call(self._w, 'indicator', 'size', entry) - - def info_anchor(self): - return self.tk.call(self._w, 'info', 'anchor') - - def info_bbox(self, entry): - return self._getints( - self.tk.call(self._w, 'info', 'bbox', entry)) or None - - def info_children(self, entry=None): - c = self.tk.call(self._w, 'info', 'children', entry) - return self.tk.splitlist(c) - - def info_data(self, entry): - return self.tk.call(self._w, 'info', 'data', entry) - - def info_dragsite(self): - return self.tk.call(self._w, 'info', 'dragsite') - - def info_dropsite(self): - return self.tk.call(self._w, 'info', 'dropsite') - - def info_exists(self, entry): - return self.tk.call(self._w, 'info', 'exists', entry) - - def info_hidden(self, entry): - return self.tk.call(self._w, 'info', 'hidden', entry) - - def info_next(self, entry): - return self.tk.call(self._w, 'info', 'next', entry) - - def info_parent(self, entry): - return self.tk.call(self._w, 'info', 'parent', entry) - - def info_prev(self, entry): - return self.tk.call(self._w, 'info', 'prev', entry) - - def info_selection(self): - c = self.tk.call(self._w, 'info', 'selection') - return self.tk.splitlist(c) - - def item_cget(self, entry, col, opt): - return self.tk.call(self._w, 'item', 'cget', entry, col, opt) - - def item_configure(self, entry, col, cnf={}, **kw): - if cnf is None: - return self._getconfigure(self._w, 'item', 'configure', entry, col) - self.tk.call(self._w, 'item', 'configure', entry, col, - *self._options(cnf, kw)) - - def item_create(self, entry, col, cnf={}, **kw): - self.tk.call( - self._w, 'item', 'create', entry, col, *self._options(cnf, kw)) - - def item_exists(self, entry, col): - return self.tk.call(self._w, 'item', 'exists', entry, col) - - def item_delete(self, entry, col): - self.tk.call(self._w, 'item', 'delete', entry, col) - - def entrycget(self, entry, opt): - return self.tk.call(self._w, 'entrycget', entry, opt) - - def entryconfigure(self, entry, cnf={}, **kw): - if cnf is None: - return self._getconfigure(self._w, 'entryconfigure', entry) - self.tk.call(self._w, 'entryconfigure', entry, - *self._options(cnf, kw)) - - def nearest(self, y): - return self.tk.call(self._w, 'nearest', y) - - def see(self, entry): - self.tk.call(self._w, 'see', entry) - - def selection_clear(self, cnf={}, **kw): - self.tk.call(self._w, 'selection', 'clear', *self._options(cnf, kw)) - - def selection_includes(self, entry): - return self.tk.call(self._w, 'selection', 'includes', entry) - - def selection_set(self, first, last=None): - self.tk.call(self._w, 'selection', 'set', first, last) - - def show_entry(self, entry): - return self.tk.call(self._w, 'show', 'entry', entry) - -class InputOnly(TixWidget): - """InputOnly - Invisible widget. Unix only. - - Subwidgets - None""" - - def __init__ (self,master=None,cnf={}, **kw): - TixWidget.__init__(self, master, 'tixInputOnly', None, cnf, kw) - -class LabelEntry(TixWidget): - """LabelEntry - Entry field with label. Packages an entry widget - and a label into one mega widget. It can be used to simplify the creation - of ``entry-form'' type of interface. - - Subwidgets Class - ---------- ----- - label Label - entry Entry""" - - def __init__ (self,master=None,cnf={}, **kw): - TixWidget.__init__(self, master, 'tixLabelEntry', - ['labelside','options'], cnf, kw) - self.subwidget_list['label'] = _dummyLabel(self, 'label') - self.subwidget_list['entry'] = _dummyEntry(self, 'entry') - -class LabelFrame(TixWidget): - """LabelFrame - Labelled Frame container. Packages a frame widget - and a label into one mega widget. To create widgets inside a - LabelFrame widget, one creates the new widgets relative to the - frame subwidget and manage them inside the frame subwidget. - - Subwidgets Class - ---------- ----- - label Label - frame Frame""" - - def __init__ (self,master=None,cnf={}, **kw): - TixWidget.__init__(self, master, 'tixLabelFrame', - ['labelside','options'], cnf, kw) - self.subwidget_list['label'] = _dummyLabel(self, 'label') - self.subwidget_list['frame'] = _dummyFrame(self, 'frame') - - -class ListNoteBook(TixWidget): - """A ListNoteBook widget is very similar to the TixNoteBook widget: - it can be used to display many windows in a limited space using a - notebook metaphor. The notebook is divided into a stack of pages - (windows). At one time only one of these pages can be shown. - The user can navigate through these pages by - choosing the name of the desired page in the hlist subwidget.""" - - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixListNoteBook', ['options'], cnf, kw) - # Is this necessary? It's not an exposed subwidget in Tix. - self.subwidget_list['pane'] = _dummyPanedWindow(self, 'pane', - destroy_physically=0) - self.subwidget_list['hlist'] = _dummyHList(self, 'hlist') - self.subwidget_list['shlist'] = _dummyScrolledHList(self, 'shlist') - - def add(self, name, cnf={}, **kw): - self.tk.call(self._w, 'add', name, *self._options(cnf, kw)) - self.subwidget_list[name] = TixSubWidget(self, name) - return self.subwidget_list[name] - - def page(self, name): - return self.subwidget(name) - - def pages(self): - # Can't call subwidgets_all directly because we don't want .nbframe - names = self.tk.splitlist(self.tk.call(self._w, 'pages')) - ret = [] - for x in names: - ret.append(self.subwidget(x)) - return ret - - def raise_page(self, name): # raise is a python keyword - self.tk.call(self._w, 'raise', name) - -class Meter(TixWidget): - """The Meter widget can be used to show the progress of a background - job which may take a long time to execute. - """ - - def __init__(self, master=None, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixMeter', - ['options'], cnf, kw) - -class NoteBook(TixWidget): - """NoteBook - Multi-page container widget (tabbed notebook metaphor). - - Subwidgets Class - ---------- ----- - nbframe NoteBookFrame - <pages> page widgets added dynamically with the add method""" - - def __init__ (self,master=None,cnf={}, **kw): - TixWidget.__init__(self,master,'tixNoteBook', ['options'], cnf, kw) - self.subwidget_list['nbframe'] = TixSubWidget(self, 'nbframe', - destroy_physically=0) - - def add(self, name, cnf={}, **kw): - self.tk.call(self._w, 'add', name, *self._options(cnf, kw)) - self.subwidget_list[name] = TixSubWidget(self, name) - return self.subwidget_list[name] - - def delete(self, name): - self.tk.call(self._w, 'delete', name) - self.subwidget_list[name].destroy() - del self.subwidget_list[name] - - def page(self, name): - return self.subwidget(name) - - def pages(self): - # Can't call subwidgets_all directly because we don't want .nbframe - names = self.tk.splitlist(self.tk.call(self._w, 'pages')) - ret = [] - for x in names: - ret.append(self.subwidget(x)) - return ret - - def raise_page(self, name): # raise is a python keyword - self.tk.call(self._w, 'raise', name) - - def raised(self): - return self.tk.call(self._w, 'raised') - -class NoteBookFrame(TixWidget): - # FIXME: This is dangerous to expose to be called on its own. - pass - -class OptionMenu(TixWidget): - """OptionMenu - creates a menu button of options. - - Subwidget Class - --------- ----- - menubutton Menubutton - menu Menu""" - - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixOptionMenu', ['options'], cnf, kw) - self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton') - self.subwidget_list['menu'] = _dummyMenu(self, 'menu') - - def add_command(self, name, cnf={}, **kw): - self.tk.call(self._w, 'add', 'command', name, *self._options(cnf, kw)) - - def add_separator(self, name, cnf={}, **kw): - self.tk.call(self._w, 'add', 'separator', name, *self._options(cnf, kw)) - - def delete(self, name): - self.tk.call(self._w, 'delete', name) - - def disable(self, name): - self.tk.call(self._w, 'disable', name) - - def enable(self, name): - self.tk.call(self._w, 'enable', name) - -class PanedWindow(TixWidget): - """PanedWindow - Multi-pane container widget - allows the user to interactively manipulate the sizes of several - panes. The panes can be arranged either vertically or horizontally.The - user changes the sizes of the panes by dragging the resize handle - between two panes. - - Subwidgets Class - ---------- ----- - <panes> g/p widgets added dynamically with the add method.""" - - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixPanedWindow', ['orientation', 'options'], cnf, kw) - - # add delete forget panecget paneconfigure panes setsize - def add(self, name, cnf={}, **kw): - self.tk.call(self._w, 'add', name, *self._options(cnf, kw)) - self.subwidget_list[name] = TixSubWidget(self, name, - check_intermediate=0) - return self.subwidget_list[name] - - def delete(self, name): - self.tk.call(self._w, 'delete', name) - self.subwidget_list[name].destroy() - del self.subwidget_list[name] - - def forget(self, name): - self.tk.call(self._w, 'forget', name) - - def panecget(self, entry, opt): - return self.tk.call(self._w, 'panecget', entry, opt) - - def paneconfigure(self, entry, cnf={}, **kw): - if cnf is None: - return self._getconfigure(self._w, 'paneconfigure', entry) - self.tk.call(self._w, 'paneconfigure', entry, *self._options(cnf, kw)) - - def panes(self): - names = self.tk.splitlist(self.tk.call(self._w, 'panes')) - return [self.subwidget(x) for x in names] - -class PopupMenu(TixWidget): - """PopupMenu widget can be used as a replacement of the tk_popup command. - The advantage of the Tix PopupMenu widget is it requires less application - code to manipulate. - - - Subwidgets Class - ---------- ----- - menubutton Menubutton - menu Menu""" - - # FIXME: It should inherit -superclass tixShell - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixPopupMenu', ['options'], cnf, kw) - self.subwidget_list['menubutton'] = _dummyMenubutton(self, 'menubutton') - self.subwidget_list['menu'] = _dummyMenu(self, 'menu') - - def bind_widget(self, widget): - self.tk.call(self._w, 'bind', widget._w) - - def unbind_widget(self, widget): - self.tk.call(self._w, 'unbind', widget._w) - - def post_widget(self, widget, x, y): - self.tk.call(self._w, 'post', widget._w, x, y) - -class ResizeHandle(TixWidget): - """Internal widget to draw resize handles on Scrolled widgets.""" - def __init__(self, master, cnf={}, **kw): - # There seems to be a Tix bug rejecting the configure method - # Let's try making the flags -static - flags = ['options', 'command', 'cursorfg', 'cursorbg', - 'handlesize', 'hintcolor', 'hintwidth', - 'x', 'y'] - # In fact, x y height width are configurable - TixWidget.__init__(self, master, 'tixResizeHandle', - flags, cnf, kw) - - def attach_widget(self, widget): - self.tk.call(self._w, 'attachwidget', widget._w) - - def detach_widget(self, widget): - self.tk.call(self._w, 'detachwidget', widget._w) - - def hide(self, widget): - self.tk.call(self._w, 'hide', widget._w) - - def show(self, widget): - self.tk.call(self._w, 'show', widget._w) - -class ScrolledHList(TixWidget): - """ScrolledHList - HList with automatic scrollbars.""" - - # FIXME: It should inherit -superclass tixScrolledWidget - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixScrolledHList', ['options'], - cnf, kw) - self.subwidget_list['hlist'] = _dummyHList(self, 'hlist') - self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb') - self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb') - -class ScrolledListBox(TixWidget): - """ScrolledListBox - Listbox with automatic scrollbars.""" - - # FIXME: It should inherit -superclass tixScrolledWidget - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixScrolledListBox', ['options'], cnf, kw) - self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox') - self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb') - self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb') - -class ScrolledText(TixWidget): - """ScrolledText - Text with automatic scrollbars.""" - - # FIXME: It should inherit -superclass tixScrolledWidget - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixScrolledText', ['options'], cnf, kw) - self.subwidget_list['text'] = _dummyText(self, 'text') - self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb') - self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb') - -class ScrolledTList(TixWidget): - """ScrolledTList - TList with automatic scrollbars.""" - - # FIXME: It should inherit -superclass tixScrolledWidget - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixScrolledTList', ['options'], - cnf, kw) - self.subwidget_list['tlist'] = _dummyTList(self, 'tlist') - self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb') - self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb') - -class ScrolledWindow(TixWidget): - """ScrolledWindow - Window with automatic scrollbars.""" - - # FIXME: It should inherit -superclass tixScrolledWidget - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixScrolledWindow', ['options'], cnf, kw) - self.subwidget_list['window'] = _dummyFrame(self, 'window') - self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb') - self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb') - -class Select(TixWidget): - """Select - Container of button subwidgets. It can be used to provide - radio-box or check-box style of selection options for the user. - - Subwidgets are buttons added dynamically using the add method.""" - - # FIXME: It should inherit -superclass tixLabelWidget - def __init__(self, master, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixSelect', - ['allowzero', 'radio', 'orientation', 'labelside', - 'options'], - cnf, kw) - self.subwidget_list['label'] = _dummyLabel(self, 'label') - - def add(self, name, cnf={}, **kw): - self.tk.call(self._w, 'add', name, *self._options(cnf, kw)) - self.subwidget_list[name] = _dummyButton(self, name) - return self.subwidget_list[name] - - def invoke(self, name): - self.tk.call(self._w, 'invoke', name) - -class Shell(TixWidget): - """Toplevel window. - - Subwidgets - None""" - - def __init__ (self,master=None,cnf={}, **kw): - TixWidget.__init__(self, master, 'tixShell', ['options', 'title'], cnf, kw) - -class DialogShell(TixWidget): - """Toplevel window, with popup popdown and center methods. - It tells the window manager that it is a dialog window and should be - treated specially. The exact treatment depends on the treatment of - the window manager. - - Subwidgets - None""" - - # FIXME: It should inherit from Shell - def __init__ (self,master=None,cnf={}, **kw): - TixWidget.__init__(self, master, - 'tixDialogShell', - ['options', 'title', 'mapped', - 'minheight', 'minwidth', - 'parent', 'transient'], cnf, kw) - - def popdown(self): - self.tk.call(self._w, 'popdown') - - def popup(self): - self.tk.call(self._w, 'popup') - - def center(self): - self.tk.call(self._w, 'center') - -class StdButtonBox(TixWidget): - """StdButtonBox - Standard Button Box (OK, Apply, Cancel and Help) """ - - def __init__(self, master=None, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixStdButtonBox', - ['orientation', 'options'], cnf, kw) - self.subwidget_list['ok'] = _dummyButton(self, 'ok') - self.subwidget_list['apply'] = _dummyButton(self, 'apply') - self.subwidget_list['cancel'] = _dummyButton(self, 'cancel') - self.subwidget_list['help'] = _dummyButton(self, 'help') - - def invoke(self, name): - if name in self.subwidget_list: - self.tk.call(self._w, 'invoke', name) - -class TList(TixWidget, XView, YView): - """TList - Hierarchy display widget which can be - used to display data in a tabular format. The list entries of a TList - widget are similar to the entries in the Tk listbox widget. The main - differences are (1) the TList widget can display the list entries in a - two dimensional format and (2) you can use graphical images as well as - multiple colors and fonts for the list entries. - - Subwidgets - None""" - - def __init__ (self,master=None,cnf={}, **kw): - TixWidget.__init__(self, master, 'tixTList', ['options'], cnf, kw) - - def active_set(self, index): - self.tk.call(self._w, 'active', 'set', index) - - def active_clear(self): - self.tk.call(self._w, 'active', 'clear') - - def anchor_set(self, index): - self.tk.call(self._w, 'anchor', 'set', index) - - def anchor_clear(self): - self.tk.call(self._w, 'anchor', 'clear') - - def delete(self, from_, to=None): - self.tk.call(self._w, 'delete', from_, to) - - def dragsite_set(self, index): - self.tk.call(self._w, 'dragsite', 'set', index) - - def dragsite_clear(self): - self.tk.call(self._w, 'dragsite', 'clear') - - def dropsite_set(self, index): - self.tk.call(self._w, 'dropsite', 'set', index) - - def dropsite_clear(self): - self.tk.call(self._w, 'dropsite', 'clear') - - def insert(self, index, cnf={}, **kw): - self.tk.call(self._w, 'insert', index, *self._options(cnf, kw)) - - def info_active(self): - return self.tk.call(self._w, 'info', 'active') - - def info_anchor(self): - return self.tk.call(self._w, 'info', 'anchor') - - def info_down(self, index): - return self.tk.call(self._w, 'info', 'down', index) - - def info_left(self, index): - return self.tk.call(self._w, 'info', 'left', index) - - def info_right(self, index): - return self.tk.call(self._w, 'info', 'right', index) - - def info_selection(self): - c = self.tk.call(self._w, 'info', 'selection') - return self.tk.splitlist(c) - - def info_size(self): - return self.tk.call(self._w, 'info', 'size') - - def info_up(self, index): - return self.tk.call(self._w, 'info', 'up', index) - - def nearest(self, x, y): - return self.tk.call(self._w, 'nearest', x, y) - - def see(self, index): - self.tk.call(self._w, 'see', index) - - def selection_clear(self, cnf={}, **kw): - self.tk.call(self._w, 'selection', 'clear', *self._options(cnf, kw)) - - def selection_includes(self, index): - return self.tk.call(self._w, 'selection', 'includes', index) - - def selection_set(self, first, last=None): - self.tk.call(self._w, 'selection', 'set', first, last) - -class Tree(TixWidget): - """Tree - The tixTree widget can be used to display hierarchical - data in a tree form. The user can adjust - the view of the tree by opening or closing parts of the tree.""" - - # FIXME: It should inherit -superclass tixScrolledWidget - def __init__(self, master=None, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixTree', - ['options'], cnf, kw) - self.subwidget_list['hlist'] = _dummyHList(self, 'hlist') - self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb') - self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb') - - def autosetmode(self): - '''This command calls the setmode method for all the entries in this - Tree widget: if an entry has no child entries, its mode is set to - none. Otherwise, if the entry has any hidden child entries, its mode is - set to open; otherwise its mode is set to close.''' - self.tk.call(self._w, 'autosetmode') - - def close(self, entrypath): - '''Close the entry given by entryPath if its mode is close.''' - self.tk.call(self._w, 'close', entrypath) - - def getmode(self, entrypath): - '''Returns the current mode of the entry given by entryPath.''' - return self.tk.call(self._w, 'getmode', entrypath) - - def open(self, entrypath): - '''Open the entry given by entryPath if its mode is open.''' - self.tk.call(self._w, 'open', entrypath) - - def setmode(self, entrypath, mode='none'): - '''This command is used to indicate whether the entry given by - entryPath has children entries and whether the children are visible. mode - must be one of open, close or none. If mode is set to open, a (+) - indicator is drawn next the entry. If mode is set to close, a (-) - indicator is drawn next the entry. If mode is set to none, no - indicators will be drawn for this entry. The default mode is none. The - open mode indicates the entry has hidden children and this entry can be - opened by the user. The close mode indicates that all the children of the - entry are now visible and the entry can be closed by the user.''' - self.tk.call(self._w, 'setmode', entrypath, mode) - - -# Could try subclassing Tree for CheckList - would need another arg to init -class CheckList(TixWidget): - """The CheckList widget - displays a list of items to be selected by the user. CheckList acts - similarly to the Tk checkbutton or radiobutton widgets, except it is - capable of handling many more items than checkbuttons or radiobuttons. - """ - # FIXME: It should inherit -superclass tixTree - def __init__(self, master=None, cnf={}, **kw): - TixWidget.__init__(self, master, 'tixCheckList', - ['options', 'radio'], cnf, kw) - self.subwidget_list['hlist'] = _dummyHList(self, 'hlist') - self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb') - self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb') - - def autosetmode(self): - '''This command calls the setmode method for all the entries in this - Tree widget: if an entry has no child entries, its mode is set to - none. Otherwise, if the entry has any hidden child entries, its mode is - set to open; otherwise its mode is set to close.''' - self.tk.call(self._w, 'autosetmode') - - def close(self, entrypath): - '''Close the entry given by entryPath if its mode is close.''' - self.tk.call(self._w, 'close', entrypath) - - def getmode(self, entrypath): - '''Returns the current mode of the entry given by entryPath.''' - return self.tk.call(self._w, 'getmode', entrypath) - - def open(self, entrypath): - '''Open the entry given by entryPath if its mode is open.''' - self.tk.call(self._w, 'open', entrypath) - - def getselection(self, mode='on'): - '''Returns a list of items whose status matches status. If status is - not specified, the list of items in the "on" status will be returned. - Mode can be on, off, default''' - return self.tk.splitlist(self.tk.call(self._w, 'getselection', mode)) - - def getstatus(self, entrypath): - '''Returns the current status of entryPath.''' - return self.tk.call(self._w, 'getstatus', entrypath) - - def setstatus(self, entrypath, mode='on'): - '''Sets the status of entryPath to be status. A bitmap will be - displayed next to the entry its status is on, off or default.''' - self.tk.call(self._w, 'setstatus', entrypath, mode) - - -########################################################################### -### The subclassing below is used to instantiate the subwidgets in each ### -### mega widget. This allows us to access their methods directly. ### -########################################################################### - -class _dummyButton(Button, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - -class _dummyCheckbutton(Checkbutton, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - -class _dummyEntry(Entry, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - -class _dummyFrame(Frame, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - -class _dummyLabel(Label, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - -class _dummyListbox(Listbox, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - -class _dummyMenu(Menu, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - -class _dummyMenubutton(Menubutton, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - -class _dummyScrollbar(Scrollbar, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - -class _dummyText(Text, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - -class _dummyScrolledListBox(ScrolledListBox, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - self.subwidget_list['listbox'] = _dummyListbox(self, 'listbox') - self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb') - self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb') - -class _dummyHList(HList, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - -class _dummyScrolledHList(ScrolledHList, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - self.subwidget_list['hlist'] = _dummyHList(self, 'hlist') - self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb') - self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb') - -class _dummyTList(TList, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - -class _dummyComboBox(ComboBox, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, ['fancy',destroy_physically]) - self.subwidget_list['label'] = _dummyLabel(self, 'label') - self.subwidget_list['entry'] = _dummyEntry(self, 'entry') - self.subwidget_list['arrow'] = _dummyButton(self, 'arrow') - - self.subwidget_list['slistbox'] = _dummyScrolledListBox(self, - 'slistbox') - try: - self.subwidget_list['tick'] = _dummyButton(self, 'tick') - #cross Button : present if created with the fancy option - self.subwidget_list['cross'] = _dummyButton(self, 'cross') - except TypeError: - # unavailable when -fancy not specified - pass - -class _dummyDirList(DirList, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - self.subwidget_list['hlist'] = _dummyHList(self, 'hlist') - self.subwidget_list['vsb'] = _dummyScrollbar(self, 'vsb') - self.subwidget_list['hsb'] = _dummyScrollbar(self, 'hsb') - -class _dummyDirSelectBox(DirSelectBox, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - self.subwidget_list['dirlist'] = _dummyDirList(self, 'dirlist') - self.subwidget_list['dircbx'] = _dummyFileComboBox(self, 'dircbx') - -class _dummyExFileSelectBox(ExFileSelectBox, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - self.subwidget_list['cancel'] = _dummyButton(self, 'cancel') - self.subwidget_list['ok'] = _dummyButton(self, 'ok') - self.subwidget_list['hidden'] = _dummyCheckbutton(self, 'hidden') - self.subwidget_list['types'] = _dummyComboBox(self, 'types') - self.subwidget_list['dir'] = _dummyComboBox(self, 'dir') - self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist') - self.subwidget_list['file'] = _dummyComboBox(self, 'file') - self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist') - -class _dummyFileSelectBox(FileSelectBox, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - self.subwidget_list['dirlist'] = _dummyScrolledListBox(self, 'dirlist') - self.subwidget_list['filelist'] = _dummyScrolledListBox(self, 'filelist') - self.subwidget_list['filter'] = _dummyComboBox(self, 'filter') - self.subwidget_list['selection'] = _dummyComboBox(self, 'selection') - -class _dummyFileComboBox(ComboBox, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - self.subwidget_list['dircbx'] = _dummyComboBox(self, 'dircbx') - -class _dummyStdButtonBox(StdButtonBox, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - self.subwidget_list['ok'] = _dummyButton(self, 'ok') - self.subwidget_list['apply'] = _dummyButton(self, 'apply') - self.subwidget_list['cancel'] = _dummyButton(self, 'cancel') - self.subwidget_list['help'] = _dummyButton(self, 'help') - -class _dummyNoteBookFrame(NoteBookFrame, TixSubWidget): - def __init__(self, master, name, destroy_physically=0): - TixSubWidget.__init__(self, master, name, destroy_physically) - -class _dummyPanedWindow(PanedWindow, TixSubWidget): - def __init__(self, master, name, destroy_physically=1): - TixSubWidget.__init__(self, master, name, destroy_physically) - -######################## -### Utility Routines ### -######################## - -#mike Should tixDestroy be exposed as a wrapper? - but not for widgets. - -def OptionName(widget): - '''Returns the qualified path name for the widget. Normally used to set - default options for subwidgets. See tixwidgets.py''' - return widget.tk.call('tixOptionName', widget._w) - -# Called with a dictionary argument of the form -# {'*.c':'C source files', '*.txt':'Text Files', '*':'All files'} -# returns a string which can be used to configure the fsbox file types -# in an ExFileSelectBox. i.e., -# '{{*} {* - All files}} {{*.c} {*.c - C source files}} {{*.txt} {*.txt - Text Files}}' -def FileTypeList(dict): - s = '' - for type in dict.keys(): - s = s + '{{' + type + '} {' + type + ' - ' + dict[type] + '}} ' - return s - -# Still to be done: -# tixIconView -class CObjView(TixWidget): - """This file implements the Canvas Object View widget. This is a base - class of IconView. It implements automatic placement/adjustment of the - scrollbars according to the canvas objects inside the canvas subwidget. - The scrollbars are adjusted so that the canvas is just large enough - to see all the objects. - """ - # FIXME: It should inherit -superclass tixScrolledWidget - pass - - -class Grid(TixWidget, XView, YView): - '''The Tix Grid command creates a new window and makes it into a - tixGrid widget. Additional options, may be specified on the command - line or in the option database to configure aspects such as its cursor - and relief. - - A Grid widget displays its contents in a two dimensional grid of cells. - Each cell may contain one Tix display item, which may be in text, - graphics or other formats. See the DisplayStyle class for more information - about Tix display items. Individual cells, or groups of cells, can be - formatted with a wide range of attributes, such as its color, relief and - border. - - Subwidgets - None''' - # valid specific resources as of Tk 8.4 - # editdonecmd, editnotifycmd, floatingcols, floatingrows, formatcmd, - # highlightbackground, highlightcolor, leftmargin, itemtype, selectmode, - # selectunit, topmargin, - def __init__(self, master=None, cnf={}, **kw): - static= [] - self.cnf= cnf - TixWidget.__init__(self, master, 'tixGrid', static, cnf, kw) - - # valid options as of Tk 8.4 - # anchor, bdtype, cget, configure, delete, dragsite, dropsite, entrycget, - # edit, entryconfigure, format, geometryinfo, info, index, move, nearest, - # selection, set, size, unset, xview, yview - def anchor_clear(self): - """Removes the selection anchor.""" - self.tk.call(self, 'anchor', 'clear') - - def anchor_get(self): - "Get the (x,y) coordinate of the current anchor cell" - return self._getints(self.tk.call(self, 'anchor', 'get')) - - def anchor_set(self, x, y): - """Set the selection anchor to the cell at (x, y).""" - self.tk.call(self, 'anchor', 'set', x, y) - - def delete_row(self, from_, to=None): - """Delete rows between from_ and to inclusive. - If to is not provided, delete only row at from_""" - if to is None: - self.tk.call(self, 'delete', 'row', from_) - else: - self.tk.call(self, 'delete', 'row', from_, to) - - def delete_column(self, from_, to=None): - """Delete columns between from_ and to inclusive. - If to is not provided, delete only column at from_""" - if to is None: - self.tk.call(self, 'delete', 'column', from_) - else: - self.tk.call(self, 'delete', 'column', from_, to) - - def edit_apply(self): - """If any cell is being edited, de-highlight the cell and applies - the changes.""" - self.tk.call(self, 'edit', 'apply') - - def edit_set(self, x, y): - """Highlights the cell at (x, y) for editing, if the -editnotify - command returns True for this cell.""" - self.tk.call(self, 'edit', 'set', x, y) - - def entrycget(self, x, y, option): - "Get the option value for cell at (x,y)" - if option and option[0] != '-': - option = '-' + option - return self.tk.call(self, 'entrycget', x, y, option) - - def entryconfigure(self, x, y, cnf=None, **kw): - return self._configure(('entryconfigure', x, y), cnf, kw) - - # def format - # def index - - def info_exists(self, x, y): - "Return True if display item exists at (x,y)" - return self._getboolean(self.tk.call(self, 'info', 'exists', x, y)) - - def info_bbox(self, x, y): - # This seems to always return '', at least for 'text' displayitems - return self.tk.call(self, 'info', 'bbox', x, y) - - def move_column(self, from_, to, offset): - """Moves the range of columns from position FROM through TO by - the distance indicated by OFFSET. For example, move_column(2, 4, 1) - moves the columns 2,3,4 to columns 3,4,5.""" - self.tk.call(self, 'move', 'column', from_, to, offset) - - def move_row(self, from_, to, offset): - """Moves the range of rows from position FROM through TO by - the distance indicated by OFFSET. - For example, move_row(2, 4, 1) moves the rows 2,3,4 to rows 3,4,5.""" - self.tk.call(self, 'move', 'row', from_, to, offset) - - def nearest(self, x, y): - "Return coordinate of cell nearest pixel coordinate (x,y)" - return self._getints(self.tk.call(self, 'nearest', x, y)) - - # def selection adjust - # def selection clear - # def selection includes - # def selection set - # def selection toggle - - def set(self, x, y, itemtype=None, **kw): - args= self._options(self.cnf, kw) - if itemtype is not None: - args= ('-itemtype', itemtype) + args - self.tk.call(self, 'set', x, y, *args) - - def size_column(self, index, **kw): - """Queries or sets the size of the column given by - INDEX. INDEX may be any non-negative - integer that gives the position of a given column. - INDEX can also be the string "default"; in this case, this command - queries or sets the default size of all columns. - When no option-value pair is given, this command returns a tuple - containing the current size setting of the given column. When - option-value pairs are given, the corresponding options of the - size setting of the given column are changed. Options may be one - of the following: - pad0 pixels - Specifies the paddings to the left of a column. - pad1 pixels - Specifies the paddings to the right of a column. - size val - Specifies the width of a column. Val may be: - "auto" -- the width of the column is set to the - width of the widest cell in the column; - a valid Tk screen distance unit; - or a real number following by the word chars - (e.g. 3.4chars) that sets the width of the column to the - given number of characters.""" - return self.tk.splitlist(self.tk.call(self._w, 'size', 'column', index, - *self._options({}, kw))) - - def size_row(self, index, **kw): - """Queries or sets the size of the row given by - INDEX. INDEX may be any non-negative - integer that gives the position of a given row . - INDEX can also be the string "default"; in this case, this command - queries or sets the default size of all rows. - When no option-value pair is given, this command returns a list con- - taining the current size setting of the given row . When option-value - pairs are given, the corresponding options of the size setting of the - given row are changed. Options may be one of the following: - pad0 pixels - Specifies the paddings to the top of a row. - pad1 pixels - Specifies the paddings to the bottom of a row. - size val - Specifies the height of a row. Val may be: - "auto" -- the height of the row is set to the - height of the highest cell in the row; - a valid Tk screen distance unit; - or a real number following by the word chars - (e.g. 3.4chars) that sets the height of the row to the - given number of characters.""" - return self.tk.splitlist(self.tk.call( - self, 'size', 'row', index, *self._options({}, kw))) - - def unset(self, x, y): - """Clears the cell at (x, y) by removing its display item.""" - self.tk.call(self._w, 'unset', x, y) - - -class ScrolledGrid(Grid): - '''Scrolled Grid widgets''' - - # FIXME: It should inherit -superclass tixScrolledWidget - def __init__(self, master=None, cnf={}, **kw): - static= [] - self.cnf= cnf - TixWidget.__init__(self, master, 'tixScrolledGrid', static, cnf, kw) |