Skip to main content

Easier Pygame!, Made by Crystal!!

Project description

CRYSTALWINDOW!!!

A tiny but mighty Pygame 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)

No external dependencies (only pygame)

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()})

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: Pygame License: Free to use, modify, and vibe with it!

Project details


Release history Release notifications | RSS feed

This version

2.5.7

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

crystalwindow-2.5.7.tar.gz (12.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

crystalwindow-2.5.7-py3-none-any.whl (3.6 kB view details)

Uploaded Python 3

File details

Details for the file crystalwindow-2.5.7.tar.gz.

File metadata

  • Download URL: crystalwindow-2.5.7.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for crystalwindow-2.5.7.tar.gz
Algorithm Hash digest
SHA256 41ae026cf183052ad323c0dfc83d38c0f87df9075f0d26b736e5457548be83f5
MD5 a866f1d17f31fc1dfd59b5ea86a23cb4
BLAKE2b-256 30b5f7c0f680742c3d398fb9b83edad804018458614bd95a95bd95f7d4b2a3e1

See more details on using hashes here.

File details

Details for the file crystalwindow-2.5.7-py3-none-any.whl.

File metadata

  • Download URL: crystalwindow-2.5.7-py3-none-any.whl
  • Upload date:
  • Size: 3.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for crystalwindow-2.5.7-py3-none-any.whl
Algorithm Hash digest
SHA256 c4291be27c700137da3f35b0cd9bc1f35103578f18bb430a5c43366c6e39c0c6
MD5 d113cc51e2bd492380dbb49ff305af62
BLAKE2b-256 e3a14879d0ef2f9bf36f412693630d4a5baea0d5a927a9159dffd6839af65a6a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page