Posted to tcl by Stu at Tue Mar 05 19:09:13 GMT 2024view pretty
# # Tkinter Widget Wrappers # # Stuart Cassoff # # Winter 2024 # Version 1.0 # import tkinter, tkinter.ttk, re def wrap (): for items,prefix in (tkinter.__dict__.items(), ""), (tkinter.ttk.__dict__.items(), "ttk."): for item in items: if "__mro__" not in object.__dir__(item[1]) or tkinter.Widget not in item[1].__mro__: continue exec(left_align(f""" class {prefix.replace(".","_")+item[0]} (tkinter.{prefix+item[0]}): def __init__(self,*args,**kwargs):super().__init__(*args,**kwargs) def grid(self,*args,**kwargs):super().grid(*args,**kwargs);return self """), globals()) def wrap2 (): exec("\n".join([left_align(f""" class {prefix.replace(".","_")+item[0]} (tkinter.{prefix+item[0]}): def __init__(self,*args,**kwargs):super().__init__(*args,**kwargs) def grid(self,*args,**kwargs):super().grid(*args,**kwargs);return self """) for items,prefix in ((tkinter.__dict__.items(), ""), (tkinter.ttk.__dict__.items(), "ttk.")) for item in items if "__mro__" in object.__dir__(item[1]) and tkinter.Widget in item[1].__mro__ ]), globals()) def left_align (blob, indent=0): res = [] start = 0 spaces = (" " * indent) for line in blob.splitlines(): if start == 0 and (m := re.match("^ +[^ ]", line)): start = m.end() - 1 res.append(spaces + line[start:]) return "\n".join(res) # EOF