[Python-checkins] python/dist/src/Lib/lib-tk Tkinter.py, 1.178, 1.179

Neal Norwitz neal at metaslash.com
Wed Feb 18 21:55:03 EST 2004


David,

Thanks for adding a test for _tkinter.c.  It's a really good start.
Unfortunately, testPackageRequire() fails for me because I don't have
Tclx.  Is there any way to make the test more robust?

I also have a question about the implementation.  It looks like 
useTK is required to be an integer.  Is that correct?  I would have 
expected to be able to use any boolean value.

Neal
--
On Tue, Feb 17, 2004 at 09:59:55PM -0800, david_ascher at users.sourceforge.net wrote:
> Update of /cvsroot/python/python/dist/src/Lib/lib-tk
> In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24617/dist/src/Lib/lib-tk
> 
> Modified Files:
> 	Tkinter.py 
> Log Message:
> Implementation of patch 869468
> 
> Allow the user to create Tkinter.Tcl objects which are
> just like Tkinter.Tk objects except that they do not
> initialize Tk. This is useful in circumstances where the
> script is being run on machines that do not have an X
> server running -- in those cases, Tk initialization fails,
> even if no window is ever created.
> 
> Includes documentation change and tests.
> 
> Tested on Linux, Solaris and Windows.
> 
> Reviewed by Martin von Loewis.
> 
> 
> Index: Tkinter.py
> ===================================================================
> RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkinter.py,v
> retrieving revision 1.178
> retrieving revision 1.179
> diff -C2 -d -r1.178 -r1.179
> *** Tkinter.py	12 Feb 2004 17:35:09 -0000	1.178
> --- Tkinter.py	18 Feb 2004 05:59:53 -0000	1.179
> ***************
> *** 1547,1551 ****
>       of an appliation. It has an associated Tcl interpreter."""
>       _w = '.'
> !     def __init__(self, screenName=None, baseName=None, className='Tk'):
>           """Return a new Toplevel widget on screen SCREENNAME. A new Tcl interpreter will
>           be created. BASENAME will be used for the identification of the profile file (see
> --- 1547,1551 ----
>       of an appliation. It has an associated Tcl interpreter."""
>       _w = '.'
> !     def __init__(self, screenName=None, baseName=None, className='Tk', useTk=1):
>           """Return a new Toplevel widget on screen SCREENNAME. A new Tcl interpreter will
>           be created. BASENAME will be used for the identification of the profile file (see
> ***************
> *** 1553,1559 ****
>           It is constructed from sys.argv[0] without extensions if None is given. CLASSNAME
>           is the name of the widget class."""
> -         global _default_root
>           self.master = None
>           self.children = {}
>           if baseName is None:
>               import sys, os
> --- 1553,1562 ----
>           It is constructed from sys.argv[0] without extensions if None is given. CLASSNAME
>           is the name of the widget class."""
>           self.master = None
>           self.children = {}
> +         self._tkloaded = 0
> +         # to avoid recursions in the getattr code in case of failure, we
> +         # ensure that self.tk is always _something_.
> +         self.tk = None  
>           if baseName is None:
>               import sys, os
> ***************
> *** 1562,1567 ****
>               if ext not in ('.py', '.pyc', '.pyo'):
>                   baseName = baseName + ext
> !         self.tk = _tkinter.create(screenName, baseName, className)
> !         self.tk.wantobjects(wantobjects)
>           if _MacOS and hasattr(_MacOS, 'SchedParams'):
>               # Disable event scanning except for Command-Period
> --- 1565,1580 ----
>               if ext not in ('.py', '.pyc', '.pyo'):
>                   baseName = baseName + ext
> !         interactive = 0
> !         self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk)
> !         if useTk:
> !             self._loadtk()
> !         self.readprofile(baseName, className)
> !     def loadtk(self):
> !         if not self._tkloaded:
> !             self.tk.loadtk()
> !             self._loadtk()
> !     def _loadtk(self):
> !         self._tkloaded = 1
> !         global _default_root
>           if _MacOS and hasattr(_MacOS, 'SchedParams'):
>               # Disable event scanning except for Command-Period
> ***************
> *** 1588,1592 ****
>           self.tk.createcommand('tkerror', _tkerror)
>           self.tk.createcommand('exit', _exit)
> -         self.readprofile(baseName, className)
>           if _support_default_root and not _default_root:
>               _default_root = self
> --- 1601,1604 ----
> ***************
> *** 1630,1633 ****
> --- 1642,1654 ----
>           sys.last_traceback = tb
>           traceback.print_exception(exc, val, tb)
> +     def __getattr__(self, attr):
> +         "Delegate attribute access to the interpreter object"
> +         return getattr(self.tk, attr)
> +     def __hasattr__(self, attr):
> +         "Delegate attribute access to the interpreter object"
> +         return hasattr(self.tk, attr)
> +     def __delattr__(self, attr):
> +         "Delegate attribute access to the interpreter object"
> +         return delattr(self.tk, attr)
>   
>   # Ideally, the classes Pack, Place and Grid disappear, the
> ***************
> *** 1645,1648 ****
> --- 1666,1673 ----
>   # copied into the Pack, Place or Grid class.
>   
> + 
> + def Tcl(screenName=None, baseName=None, className='Tk', useTk=0):
> +     return Tk(screenName, baseName, className, useTk)
> + 
>   class Pack:
>       """Geometry manager Pack.
> 
> 
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins



More information about the Python-checkins mailing list