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

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.9.8.1.tar.gz (37.6 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.9.8.1-py3-none-any.whl (39.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for crystalwindow-2.9.8.1.tar.gz
Algorithm Hash digest
SHA256 ea9bd9b6cac4dcee804e2085ad63089ebf8c0142e8a00df800a035ca307eeece
MD5 9e99230563dcf3589ad5636ddd6ad514
BLAKE2b-256 aff0480d45d22b60cb2e6fa66de3a35db9b36a49c99892a9145ecde944cb9199

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crystalwindow-2.9.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 847ea10f3be70d9f37990d11558acb1acbb338a2d936d53a77aac8a684ff1921
MD5 5e4bef2a8778e5710a5973696b79483a
BLAKE2b-256 02b0157b4e3d47e8a46e4389a94a70e53274a47fc1399601fe8e74340109c3ed

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