A Tkinter powered window + GUI toolkit made by Crystal (ME)! Easier apps, smoother UI and all-in-one helpers!, Gui, Buttons, FileHelper, Sprites, Animations, Colors, Math, Gravity, Camera, 3D and more!
Project description
CRYSTALWINDOW!!!
A tiny but mighty Tkinter framework that gives u a full window system, GUI magic, physics, and file power — all packed into one clean lil module. made by crystal
No setup pain. No folder chaos. Just import it. Boom. Instant game window. 🎮
Quick Start
pip install crystalwindow
then make a new .py file:
from crystalwindow import Window # imports everything from crystalwindow (in this case its Window)
win = Window(800, 600, "Crystal Demo") # setup: Window(width, height, name, icon=MyIcon.ico)
win.run() # runs the window loop
win.quit() # closes it (for RAM n CPU)
Run it. and boom, instant working window. Yes, THAT easy.
Easy crystalwindow window + Gui + Text file:
from crystalwindow import *
win = Window(800, 600, "CrystalWindowLib Mega Sandbox")
gui = GUIManager()
toggle1 = Toggle((50, 50, 100, 40), value=False)
slider1 = Slider((50, 120, 200, 30), min_val=0, max_val=100, value=50)
btn1 = Button(rect=(50, 200, 150, 50), text="Click Me!", color=random_color(),
hover_color=random_color(), callback=lambda: print("Button clicked!"))
lbl1 = Label((250, 50), "Hello GUI!", color=random_color(), size=24)
gui.add(toggle1)
gui.add(slider1)
gui.add(btn1)
gui.add(lbl1)
# --- Debug Overlay ---
debug = DebugOverlay()
# --- Camera Shake ---
shake = CameraShake(intensity=20)
# --- Main loop ---
def update(win):
gui.update(win)
gui.draw(win)
# --- draw text examples ---
win.draw_text_later("Normal Text", pos=(400, 50), size=18, color=random_color())
win.draw_text_later("Bold Text", pos=(400, 80), size=20, color=random_color(), bold=True)
win.draw_text_later("Italic Text", pos=(400, 110), size=20, color=random_color(), italic=True)
win.draw_text_later("Bold + Italic", pos=(400, 140), size=22, color=random_color(), bold=True, italic=True)
# --- draw toggle/slider values ---
win.draw_text_later(f"Toggle: {toggle1.value}", pos=(50, 90), size=18)
win.draw_text_later(f"Slider: {int(slider1.value)}", pos=(50, 160), size=18)
# --- draw gradient ---
gradient_rect(win, (50, 300, 200, 100), (255,0,0), (0,0,255))
# --- screen shake example (move a rectangle with shake) ---
shake.update()
x_off, y_off = shake.offset
win.draw_rect((0,255,0), (500+x_off, 300+y_off, 100, 50))
# --- draw random name + color ---
win.draw_text_later(f"Random Name: {random_name()}", pos=(50, 420), size=20, color=random_color())
# --- debug overlay ---
debug.draw(win, fps=int(win.clock.get_fps()))
win.run(update)
win.quit()
And now thats how you use it!
Current Variables.
Whats Inside
Built-in window manager
Built-in GUI (buttons, sliders, toggles, labels)
Built-in gravity + physics engine
Tilemap system (place & save blocks!)
Image loader (with default base64 logo)
Safe startup (works even inside PyInstaller)
Mathematics Handler
Works offline
Minimal syntax
Full debug overlay
Window System
from crystalwindow import *
win = Window(800, 600, "My Game", icon="MyIcon.png")
def loop(win):
win.fill((10, 10, 30))
# draw or update stuff here
win.run(loop)
win.quit()
Features
- handles events
- tracks keys + mouse
- supports fullscreen
- safe to close anytime
Player Example
player = Player(100, 100)
def loop(win):
player.update(win.keys)
player.draw(win.screen)
move(dx, dy) -> moves player
take_damage(x) -> takes damage
heal(x) -> heals
draw(surface) -> renders sprite
TileMap
tilemap = TileMap(32)
tilemap.add_tile(5, 5, "grass")
tilemap.save("level.json")
add_tile(x, y, type)
remove_tile(x, y)
draw(surface)
save(file) / load(file)
GUI System
btn = Button(20, 20, 120, 40, "Click Me!", lambda: print("yo"))
gui = GUIManager()
gui.add(btn)
Use built-in stuff like:
Button(x, y, w, h, text, onclick)
Label(x, y, text)
Toggle(x, y, w, h, text, default=False)
Slider(x, y, w, min, max, default)
Gravity
g = Gravity(0.5)
g.update(player)
makes objects fall realistically. ez.
FileHelper
save_json("data.json", {"coins": 99})
data = load_json("data.json")
Also supports:
save_pickle / load_pickle
FileDialog("save") (tkinter dialog popup)
DrawHelper
DrawHelper.text(win.screen, "Hello!", (10,10), (255,255,255), 24)
DrawHelper.rect(win.screen, (100,0,200), (50,50,100,60))
perfect for ui & quick visuals
Debug Tools
debug = DebugOverlay() debug.toggle() # show or hide FPS debug.draw(win.screen, {"hp": 100, "fps": win.clock.get_fps()})
Mathematics
math = Mathematics()
- Current Variables math.add(num1, num2) math.subtract(num1, num2) math.multiply(num1, num2) math.divide(num1, num2)
Example Game
from crystalwindow import *
win = Window(800, 600, "My Cool Game")
player = Player(100, 100)
gravity = Gravity()
def update(win):
win.fill((25, 25, 40))
player.update(win.keys)
gravity.update(player)
player.draw(win.screen)
win.run(update)
win.quit()
Default Logo
There is a lil encoded PNG inside the file called:
DEFAULT_LOGO_BASE64
Its used when no icon is given. Set ur own like:
Window(800, 600, "My Window", icon="MyIcon.png")
or do whatever you want.. i guess.
Example Integration
from crystalwindow import Window
win = Window(800, 600, "My Window", icon="MyIcon.png")
while win.running:
win.check_events()
win.fill((10, 10, 20))
win.run()
win.quit()
Credits
Made by: CrystalBallyHereXD Framework: CrystalWindow Powered by: Tkinter and Python License: Free to use, modify, and vibe with it!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file crystalwindow-5.6.tar.gz.
File metadata
- Download URL: crystalwindow-5.6.tar.gz
- Upload date:
- Size: 71.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
77235020530c46e5623ce8ea37f2166085a03104b8f47e9d54fec895d757aa6d
|
|
| MD5 |
d014758de15e391146d2e92e45f6be4f
|
|
| BLAKE2b-256 |
a2f241dc1e1ba253c515a36f0da0c6c67286a287ddfc74fd46479e591fcea271
|
File details
Details for the file crystalwindow-5.6-py3-none-any.whl.
File metadata
- Download URL: crystalwindow-5.6-py3-none-any.whl
- Upload date:
- Size: 77.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8e385e45b2db9c548dd4734f03cacbc8b3a53a0d0b224fbf76bd5590ec5eb73
|
|
| MD5 |
758281e0b67a769679bfe56f5e1699fc
|
|
| BLAKE2b-256 |
29b7db9677f2ab39724159142ecb33b314700834293ebbaf0c8c89b01759a26a
|