Skip to main content

Python bindings for Gum UI (.NET runtime via PythonNET)

Project description

Gum UI

Gum is not an acronym, or a backronym. It is just the name of the User Interface engine.

This project utilizes the GUM Layout engine from the Flat Red Ball C# Open Source project here https://docs.flatredball.com/gum

If you want to contribute to the Layout engine, or this Python Rendering Engine visit us on github: https://github.com/vchelaru/Gum

Experimental Note

WARNING: This project is an experiment and proof of concept. The goal was to see if PythonNET could be used to export the C# GUM UI backend Layout Engine to be used in other tools like Python with PyGame.

Currently it "works" but there are many missing features and bugs.

Right now it only draws a RECTANGLE the encompasses the entire size of the GUM UI's GraphicalUiElement.

You can then add other objects to this root object (that are currently only drawing rectangles).

You can't control the color, it starts at (20, 20, 20) and increases in color intensity by 20 and wraps around at 256.

If this ends up being something that others want, please join the discord or put tickets into github.

Setup

Install gumui and pygame

  • pip install gumui
  • pip install pygame

Getting started with

There are really only 3 important things after you import. Create an Instance of GumUI, call Update, and call Draw()

  1. First you need to import the GumUI and PyGame
from gumui import GumUI, GraphicalUiElement, InvisibleRenderable
import pygame
from pygame.locals import *
  1. Next you need to initialize and configure pygame, might as well do it now
pygame.init()
BLACK = (0, 0, 0)
SCREEN_WIDTH = 1280
SCREEN_HEIGHT = 960
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
  1. Setup timing to force to 60 FPS (Frames Per Second)
fps_clock = pygame.time.Clock()
fps = 60.0
dt = fps_clock.tick(fps)
  1. Once PyGame is setup, you need to create the GumUI and initialize it
# Initialize GumUI
myUi = GumUI()
myUi.initialize(screen) # `screen` is a Surface you wish GUM to draw to https://www.pygame.org/docs/ref/surface.html
  1. Lets add a single item to the UI for now it will be simple 32x32 square
child = GraphicalUiElement(InvisibleRenderable())
myUi.RootElement.Children.Add(child)
child.XUnits = Converters.GeneralUnitType.PixelsFromSmall
child.Width = 32
child.YUnits = Converters.GeneralUnitType.PixelsFromSmall
child.Height = 32
  1. Now that you've defined the UI (1 square inside the root element) you can create the standard pygame loop
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

NOTE: This will run forever, or until you hit ESC or press the X

  1. Update and then Draw the UI elements
    myUi.update()
    screen.fill(BLACK)  # Fill the screen with black.
    myUi.draw()
    pygame.display.flip()
    dt = fps_clock.tick(fps)

Adding more UI elements

Currently this is a work in progress, as such, the only thing that is drawn are squares.

To add another UI element "square" you create an instance of GraphicalUiElement, set it's properties, and add it to a parent.

child = GraphicalUiElement(InvisibleRenderable())
myUi.RootElement.Children.Add(child)

child.XUnits = Converters.GeneralUnitType.PixelsFromSmall
child.Width = 32
child.YUnits = Converters.GeneralUnitType.PixelsFromSmall
child.Height = 32

To see the full list of properties available for a GraphicalUiElement see this documentation https://docs.flatredball.com/gum/code/gum-code-reference/graphicaluielement

Contributing

This is a FOSS (Free and Open Source Software) project.

Project details


Download files

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

Source Distribution

gumui-0.1.1.tar.gz (271.3 kB view details)

Uploaded Source

Built Distribution

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

gumui-0.1.1-py3-none-any.whl (278.4 kB view details)

Uploaded Python 3

File details

Details for the file gumui-0.1.1.tar.gz.

File metadata

  • Download URL: gumui-0.1.1.tar.gz
  • Upload date:
  • Size: 271.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.1

File hashes

Hashes for gumui-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7e2700cd554b391ff2bcc82aab0910d4f622b8314fb42871be5f233531ce138d
MD5 1a785896073ce4f6160916e3db5dc65f
BLAKE2b-256 dfef30a15b640a80e3d419d17d3e9cb13ca7d790abd8eeb2b7a5e8828d173fe9

See more details on using hashes here.

File details

Details for the file gumui-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: gumui-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 278.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.1

File hashes

Hashes for gumui-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3b6298f7b4104a43e1034ec103f97668e4c5bc723ad827bd2c50cc1fdcad91d1
MD5 f312d0001ec008bc4baf2d7cd3a561fe
BLAKE2b-256 9d7b08d9de2ed4121e6d2d3ace2703d2718aca814cd734aa70b0a6a4439a3449

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