Tkintergalactic Declarative Tcl/Tk UI library for Python. Somewhat React-like (there is effectively a Tk VDOM). Well typed. Maps very closely to the underlying Tcl/Tk for ease of debugging. Zero dependency. On mac sometimes you have to start by wiggling the window. Small enough to understand how it works. In an incomplete state - much functionality missing. Hello World After pip install tkintergalactic , just run: import tkintergalactic as tk counter = 0 @ tk . command () def inc_counter () -> None : global counter counter += 1 tk . Window ( app = lambda : tk . Frame ( tk . Button ( text = "Hello World!" , onbuttonrelease = inc_counter ), tk . Text ( content = f"Button clicked { counter } times" ), ), ). run () TODO list from dataclasses import dataclass , field import tkintergalactic as tk @ dataclass class Task : description : str complete : bool = False @ dataclass class State : tasks : list [ Task ] = field ( default_factory = list ) new_task_description : str = "" state = State () @ tk . command () def add_task () -> None : state . tasks . append ( Task ( state . new_task_description )) state . new_task_description = "" @ tk . command () def delete_task ( i : int ) -> None : state . tasks . pop ( i ) @ tk . command () def toggle_class_complete ( i : int ) -> None : state . tasks [ i ]. complete = not state . tasks [ i ]. complete @ tk . command ( with_event = True ) def set_new_task_description ( e : tk . EventKeyRelease ) -> None : state . new_task_description = e . value tk . Window ( title = "TODO List" , h = 600 , w = 500 , app = lambda : tk . Frame ( tk . Frame ( [ tk . Frame ( tk . Entry ( value = task . description , side = "left" , font = tk . Font ( styles = [ "overstrike" ]) if task . complete else tk . Font (), expand = True , ), tk . Button ( text = "✗" if task . complete else "✔" , onbuttonrelease = toggle_class_complete . partial ( i = i ), ), tk . Button ( text = "Delete" , onbuttonrelease = delete_task . partial ( i = i ), side = "right" ), fill...
First seen: 2025-05-05 19:52
Last seen: 2025-05-05 22:53