Metadata-Version: 2.4
Name: crystalwindow
Version: 3.7.1b0
Summary: A Tkinter powered window + GUI toolkit made by Crystal (MEEEEEE)! Easier apps, smoother UI and all-in-one helpers!
Home-page: https://pypi.org/project/crystalwindow/
Author: CrystalBallyHereXD
Author-email: mavilla.519@gmail.com
Project-URL: Homepage, https://github.com/yourusername/crystalwindow
Project-URL: YouTube, https://www.Youtube.com/@CrystalBallyHereXD
Project-URL: PiWheels, https://www.piwheels.org/project/crystalwindow/
Keywords: tkinter gui window toolkit easy crystalwindow crystal cw player moveable easygui python py file math gravity hex color
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development :: User Interfaces
Classifier: License :: OSI Approved :: MIT License
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license-file
Dynamic: project-url
Dynamic: requires-python
Dynamic: summary

# 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!
