Skip to content
55 changes: 55 additions & 0 deletions graalpython/lib-python/3/_tkinter/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# _tkinter package -- low-level interface to libtk and libtcl.
#
# This is an internal module, applications should "import tkinter" instead.
#
# This version is based PyPy which itself is based on cffi, and is a translation of _tkinter.c
# from CPython, version 2.7.4.

import sys

class TclError(Exception):
pass

from .tklib_cffi import ffi as tkffi, lib as tklib

from .app import TkApp
from .tclobj import TclObject as Tcl_Obj
from .app import FromTclString, ToTCLString

TK_VERSION = FromTclString(tkffi.string(tklib.get_tk_version()))
TCL_VERSION = FromTclString(tkffi.string(tklib.get_tcl_version()))

READABLE = tklib.TCL_READABLE
WRITABLE = tklib.TCL_WRITABLE
EXCEPTION = tklib.TCL_EXCEPTION
DONT_WAIT = tklib.TCL_DONT_WAIT

def create(screenName=None, baseName=None, className=None,
interactive=False, wantobjects=False, wantTk=True,
sync=False, use=None):
return TkApp(screenName, baseName, className,
interactive, wantobjects, wantTk, sync, use)

def dooneevent(flags=0):
return tklib.Tcl_DoOneEvent(flags)


def _flatten(item):
def _flatten1(output, item, depth):
if depth > 1000:
raise ValueError("nesting too deep in _flatten")
if not isinstance(item, (list, tuple)):
raise TypeError("argument must be sequence")
# copy items to output tuple
for o in item:
if isinstance(o, (list, tuple)):
_flatten1(output, o, depth + 1)
elif o is not None:
output.append(o)

result = []
_flatten1(result, item, 0)
return tuple(result)

# Encoding is not specified explicitly, but "must be passed argv[0]" sounds like a simple conversion to raw bytes.
tklib.Tcl_FindExecutable(ToTCLString(sys.executable))
Loading