1+ # _tkinter package -- low-level interface to libtk and libtcl.
2+ #
3+ # This is an internal module, applications should "import tkinter" instead.
4+ #
5+ # This version is based PyPy which itself is based on cffi, and is a translation of _tkinter.c
6+ # from CPython, version 2.7.4.
7+
8+ import sys
9+
10+ class TclError (Exception ):
11+ pass
12+
13+ from .tklib_cffi import ffi as tkffi , lib as tklib
14+
15+ from .app import TkApp
16+ from .tclobj import TclObject as Tcl_Obj
17+ from .app import FromTclString , ToTCLString
18+
19+ TK_VERSION = FromTclString (tkffi .string (tklib .get_tk_version ()))
20+ TCL_VERSION = FromTclString (tkffi .string (tklib .get_tcl_version ()))
21+
22+ READABLE = tklib .TCL_READABLE
23+ WRITABLE = tklib .TCL_WRITABLE
24+ EXCEPTION = tklib .TCL_EXCEPTION
25+ DONT_WAIT = tklib .TCL_DONT_WAIT
26+
27+ def create (screenName = None , baseName = None , className = None ,
28+ interactive = False , wantobjects = False , wantTk = True ,
29+ sync = False , use = None ):
30+ return TkApp (screenName , baseName , className ,
31+ interactive , wantobjects , wantTk , sync , use )
32+
33+ def dooneevent (flags = 0 ):
34+ return tklib .Tcl_DoOneEvent (flags )
35+
36+
37+ def _flatten (item ):
38+ def _flatten1 (output , item , depth ):
39+ if depth > 1000 :
40+ raise ValueError ("nesting too deep in _flatten" )
41+ if not isinstance (item , (list , tuple )):
42+ raise TypeError ("argument must be sequence" )
43+ # copy items to output tuple
44+ for o in item :
45+ if isinstance (o , (list , tuple )):
46+ _flatten1 (output , o , depth + 1 )
47+ elif o is not None :
48+ output .append (o )
49+
50+ result = []
51+ _flatten1 (result , item , 0 )
52+ return tuple (result )
53+
54+ # Encoding is not specified explicitly, but "must be passed argv[0]" sounds like a simple conversion to raw bytes.
55+ tklib .Tcl_FindExecutable (ToTCLString (sys .executable ))
0 commit comments