crystalwindow


Namecrystalwindow JSON
Version 3.6.6 PyPI version JSON
download
home_pagehttps://pypi.org/project/crystalwindow/
SummaryA Tkinter powered window + GUI toolkit made by Crystal (MEEEEEE)! Easier apps, smoother UI and all-in-one helpers!
upload_time2025-11-14 15:40:34
maintainerNone
docs_urlNone
authorCrystalBallyHereXD
requires_python>=3.6
licenseNone
keywords tkinter gui window toolkit easy crystalwindow crystal cw player moveable easygui python py file math gravity hex color
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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!

            

Raw data

            {
    "_id": null,
    "home_page": "https://pypi.org/project/crystalwindow/",
    "name": "crystalwindow",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": null,
    "keywords": "tkinter gui window toolkit easy crystalwindow crystal cw player moveable easygui python py file math gravity hex color",
    "author": "CrystalBallyHereXD",
    "author_email": "mavilla.519@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/83/43/e394eb1b345057516dc80126f1acc057a7022a4b650358ee46d7a9ec267e/crystalwindow-3.6.6.tar.gz",
    "platform": null,
    "description": "# CRYSTALWINDOW!!!\r\n\r\nA tiny but mighty Tkinter framework that gives u a full window system, GUI magic, physics, and file power \u2014 all packed into one clean lil module. made by crystal\r\n\r\nNo setup pain. No folder chaos.\r\nJust import it. Boom. Instant game window. \ud83c\udfae\r\n\r\n# Quick Start\r\npip install crystalwindow\r\n\r\n\r\nthen make a new .py file:\r\n\r\n    from crystalwindow import Window  # imports everything from crystalwindow (in this case its Window)\r\n\r\n    win = Window(800, 600, \"Crystal Demo\")  # setup: Window(width, height, name, icon=MyIcon.ico)\r\n    win.run()  # runs the window loop\r\n    win.quit()   # closes it (for RAM n CPU)\r\n\r\n\r\nRun it. and boom, instant working window.\r\nYes, THAT easy.\r\n\r\n# Easy crystalwindow window + Gui + Text file:\r\n    from crystalwindow import *\r\n\r\n    win = Window(800, 600, \"CrystalWindowLib Mega Sandbox\")\r\n\r\n    gui = GUIManager()\r\n    toggle1 = Toggle((50, 50, 100, 40), value=False)\r\n    slider1 = Slider((50, 120, 200, 30), min_val=0, max_val=100, value=50)\r\n\r\n    btn1 = Button(rect=(50, 200, 150, 50), text=\"Click Me!\", color=random_color(),\r\n                  hover_color=random_color(), callback=lambda: print(\"Button clicked!\"))\r\n    lbl1 = Label((250, 50), \"Hello GUI!\", color=random_color(), size=24)\r\n\r\n    gui.add(toggle1)\r\n    gui.add(slider1)\r\n    gui.add(btn1)\r\n    gui.add(lbl1)\r\n\r\n    # --- Debug Overlay ---\r\n    debug = DebugOverlay()\r\n\r\n    # --- Camera Shake ---\r\n    shake = CameraShake(intensity=20)\r\n\r\n    # --- Main loop ---\r\n    def update(win):\r\n        gui.update(win)\r\n        gui.draw(win)\r\n\r\n        # --- draw text examples ---\r\n        win.draw_text_later(\"Normal Text\", pos=(400, 50), size=18, color=random_color())\r\n        win.draw_text_later(\"Bold Text\", pos=(400, 80), size=20, color=random_color(), bold=True)\r\n        win.draw_text_later(\"Italic Text\", pos=(400, 110), size=20, color=random_color(), italic=True)\r\n        win.draw_text_later(\"Bold + Italic\", pos=(400, 140), size=22, color=random_color(), bold=True, italic=True)\r\n\r\n        # --- draw toggle/slider values ---\r\n        win.draw_text_later(f\"Toggle: {toggle1.value}\", pos=(50, 90), size=18)\r\n        win.draw_text_later(f\"Slider: {int(slider1.value)}\", pos=(50, 160), size=18)\r\n\r\n        # --- draw gradient ---\r\n        gradient_rect(win, (50, 300, 200, 100), (255,0,0), (0,0,255))\r\n\r\n        # --- screen shake example (move a rectangle with shake) ---\r\n        shake.update()\r\n        x_off, y_off = shake.offset\r\n        win.draw_rect((0,255,0), (500+x_off, 300+y_off, 100, 50))\r\n    \r\n        # --- draw random name + color ---\r\n        win.draw_text_later(f\"Random Name: {random_name()}\", pos=(50, 420), size=20, color=random_color())\r\n    \r\n        # --- debug overlay ---\r\n        debug.draw(win, fps=int(win.clock.get_fps()))\r\n\r\n    win.run(update)\r\n    win.quit()\r\n\r\nAnd now thats how you use it!\r\n\r\n# Current Variables.  \r\n\r\n# Whats Inside\r\n\r\nBuilt-in window manager\r\n\r\nBuilt-in GUI (buttons, sliders, toggles, labels)\r\n\r\nBuilt-in gravity + physics engine\r\n\r\nTilemap system (place & save blocks!)\r\n\r\nImage loader (with default base64 logo)\r\n\r\nSafe startup (works even inside PyInstaller)\r\n\r\nMathematics Handler\r\n\r\nWorks offline\r\n\r\nMinimal syntax\r\n\r\nFull debug overlay\r\n\r\n# Window System\r\n    from crystalwindow import *\r\n\r\n    win = Window(800, 600, \"My Game\", icon=\"MyIcon.png\")\r\n\r\n    def loop(win):\r\n        win.fill((10, 10, 30))\r\n        # draw or update stuff here\r\n\r\n    win.run(loop)\r\n    win.quit()\r\n\r\n# Features \r\n*  handles events\r\n*  tracks keys + mouse\r\n*  supports fullscreen\r\n*  safe to close anytime\r\n\r\n# Player Example\r\n    player = Player(100, 100)\r\n\r\n    def loop(win):\r\n        player.update(win.keys)\r\n        player.draw(win.screen)\r\n    move(dx, dy) -> moves player\r\n    take_damage(x) -> takes damage\r\n    heal(x) -> heals\r\n    draw(surface) -> renders sprite\r\n\r\n# TileMap\r\n    tilemap = TileMap(32)\r\n    tilemap.add_tile(5, 5, \"grass\")\r\n    tilemap.save(\"level.json\")\r\n    add_tile(x, y, type)\r\n    remove_tile(x, y)\r\n    draw(surface)\r\n    save(file) / load(file)\r\n\r\n#  GUI System\r\n    btn = Button(20, 20, 120, 40, \"Click Me!\", lambda: print(\"yo\"))\r\n    gui = GUIManager()\r\n    gui.add(btn)\r\n\r\n\r\nUse built-in stuff like:\r\n\r\n    Button(x, y, w, h, text, onclick)\r\n    Label(x, y, text)\r\n    Toggle(x, y, w, h, text, default=False)\r\n    Slider(x, y, w, min, max, default)\r\n\r\n# Gravity\r\n    g = Gravity(0.5)\r\n    g.update(player)\r\n\r\n\r\nmakes objects fall realistically. ez.\r\n\r\n# FileHelper\r\n    save_json(\"data.json\", {\"coins\": 99})\r\n    data = load_json(\"data.json\")\r\n\r\n\r\nAlso supports:\r\n\r\n    save_pickle / load_pickle\r\n\r\n    FileDialog(\"save\") (tkinter dialog popup)\r\n\r\n# DrawHelper\r\n    DrawHelper.text(win.screen, \"Hello!\", (10,10), (255,255,255), 24)\r\n    DrawHelper.rect(win.screen, (100,0,200), (50,50,100,60))\r\n\r\n\r\nperfect for ui & quick visuals \r\n\r\n# Debug Tools\r\ndebug = DebugOverlay()\r\ndebug.toggle()  # show or hide FPS\r\ndebug.draw(win.screen, {\"hp\": 100, \"fps\": win.clock.get_fps()})\r\n\r\n# Mathematics\r\nmath = Mathematics()\r\n* Current Variables\r\n    math.add(num1, num2)\r\n    math.subtract(num1, num2)\r\n    math.multiply(num1, num2)\r\n    math.divide(num1, num2)\r\n\r\n# Example Game\r\n    from crystalwindow import *\r\n\r\n    win = Window(800, 600, \"My Cool Game\")\r\n    player = Player(100, 100)\r\n    gravity = Gravity()\r\n\r\n    def update(win):\r\n        win.fill((25, 25, 40))\r\n        player.update(win.keys)\r\n        gravity.update(player)\r\n        player.draw(win.screen)\r\n\r\n    win.run(update)\r\n    win.quit()\r\n\r\n# Default Logo\r\n\r\nThere is a lil encoded PNG inside the file called:\r\n\r\nDEFAULT_LOGO_BASE64\r\n\r\n\r\nIts used when no icon is given.\r\nSet ur own like:\r\n\r\n    Window(800, 600, \"My Window\", icon=\"MyIcon.png\")\r\n\r\n\r\nor do whatever you want.. i guess.\r\n\r\n# Example Integration\r\n    from crystalwindow import Window\r\n\r\n    win = Window(800, 600, \"My Window\", icon=\"MyIcon.png\")\r\n\r\n    while win.running:\r\n        win.check_events()\r\n        win.fill((10, 10, 20))\r\n        win.run()\r\n        win.quit()\r\n\r\n# Credits\r\n\r\nMade by: CrystalBallyHereXD\r\nFramework: CrystalWindow\r\nPowered by: Tkinter and Python\r\nLicense: Free to use, modify, and vibe with it!\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A Tkinter powered window + GUI toolkit made by Crystal (MEEEEEE)! Easier apps, smoother UI and all-in-one helpers!",
    "version": "3.6.6",
    "project_urls": {
        "Homepage": "https://github.com/yourusername/crystalwindow",
        "PiWheels": "https://www.piwheels.org/project/crystalwindow/",
        "YouTube": "https://www.Youtube.com/@CrystalBallyHereXD"
    },
    "split_keywords": [
        "tkinter",
        "gui",
        "window",
        "toolkit",
        "easy",
        "crystalwindow",
        "crystal",
        "cw",
        "player",
        "moveable",
        "easygui",
        "python",
        "py",
        "file",
        "math",
        "gravity",
        "hex",
        "color"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6ebf54d96f1d2ac8a37dcc506d8b3180a5f5a3e915b2df7ec367f8a7d3ca603c",
                "md5": "c515863d584fede9a081a6d83fbc9f4d",
                "sha256": "6a26de548656ea7bf8f8ad05549f084ec69e1a0dbf468172f0a0a5a13bab793b"
            },
            "downloads": -1,
            "filename": "crystalwindow-3.6.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c515863d584fede9a081a6d83fbc9f4d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 47214,
            "upload_time": "2025-11-14T15:40:28",
            "upload_time_iso_8601": "2025-11-14T15:40:28.560258Z",
            "url": "https://files.pythonhosted.org/packages/6e/bf/54d96f1d2ac8a37dcc506d8b3180a5f5a3e915b2df7ec367f8a7d3ca603c/crystalwindow-3.6.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8343e394eb1b345057516dc80126f1acc057a7022a4b650358ee46d7a9ec267e",
                "md5": "f668fecd32c8620e264d31341d7349a1",
                "sha256": "adf621479edb9773b04e8d6c16b79b57fddf6c06f174df53628f5f1f6082edea"
            },
            "downloads": -1,
            "filename": "crystalwindow-3.6.6.tar.gz",
            "has_sig": false,
            "md5_digest": "f668fecd32c8620e264d31341d7349a1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 44235,
            "upload_time": "2025-11-14T15:40:34",
            "upload_time_iso_8601": "2025-11-14T15:40:34.792403Z",
            "url": "https://files.pythonhosted.org/packages/83/43/e394eb1b345057516dc80126f1acc057a7022a4b650358ee46d7a9ec267e/crystalwindow-3.6.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-11-14 15:40:34",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "yourusername",
    "github_project": "crystalwindow",
    "github_not_found": true,
    "lcname": "crystalwindow"
}
        
Elapsed time: 1.98798s