Skip to main content

A Python library make simple UI using pysdl2

Project description

pysdl2-sdl2ui
=============

A library to make simple UI using pysdl2.

Introduction
------------

```python
class MyApp(sdl2ui.App):
width = 256
height = 224
zoom = 3
# NOTE: the fps you desire: less fps = less CPU usage
fps = 30
name = "My Application"
# NOTE: order the handlers in what you want to display first
default_handlers = [MainHandler, ListSelectorHandler, MenuHandler]
default_resources = [('background', 'background.png')]


logging.basicConfig(level=logging.DEBUG)
app = Meldnafen(handlers=[sdl2ui.handler.DebuggerHandler])
app.loop()
del app
```

Each handler will have three main methods: `init()`, `peek()` and `draw()`:

* `init()` is called as soon as the application is started (instanciated). You
can set all kind of variables in your instance here before anything shows up.
* `peek()` is called at every frame. The capture of the input can be made here.
If peek() returns True, sdl2ui will re-draw the whole screen (using all the
active handlers.
* `draw()` is called everytime the application need to re-draw the screen.

### Examples

```python
class MainHandler(sdl2ui.Handler):
def peek(self):
if self.app.keys[sdl2.SDL_SCANCODE_D]:
self.app.keys[sdl2.SDL_SCANCODE_D] = False
# NOTE: toggle the debugger mode
self.app.handlers[sdl2ui.handler.DebuggerHandler].toggle()
elif self.app.keys[sdl2.SDL_SCANCODE_S]:
self.app.keys[sdl2.SDL_SCANCODE_S] = False
# NOTE: toggle the display of the menu and the list selector
self.app.handlers[ListSelectorHandler].toggle()
self.app.handlers[MenuHandler].toggle()
elif self.app.keys[sdl2.SDL_SCANCODE_Q]:
self.app.keys[sdl2.SDL_SCANCODE_Q] = False
self.app.quit = True
else:
return False
return True

def draw(self):
self.app.draw('background', x=0, y=0)
```

```python
class MenuHandler(sdl2ui.Handler):
highlight = (0x00, 0x00, 0xff, 0xff)
line_space = 8
default_active = False
menu_actions = [
("Save", lambda x: x.save()),
("Load", lambda x: x.load()),
("Quit", lambda x: x.quit()),
]

def init(self):
self.select = 0

def save(self):
# TODO save()
pass

def load(self):
# TODO load()
pass

def quit(self):
self.app.quit = True

def peek(self):
if self.app.keys[sdl2.SDL_SCANCODE_UP]:
self.app.keys[sdl2.SDL_SCANCODE_UP] = False
self.select -= 1
if self.select < 0:
self.select = len(self.menu_actions) - 1
elif self.app.keys[sdl2.SDL_SCANCODE_DOWN]:
self.app.keys[sdl2.SDL_SCANCODE_DOWN] = False
self.select += 1
if self.select >= len(self.menu_actions):
self.select = 0
elif self.app.keys[sdl2.SDL_SCANCODE_RETURN]:
self.app.keys[sdl2.SDL_SCANCODE_RETURN] = False
_, func = self.menu_actions[self.select]
func()
else:
return False
return True

def draw(self):
border = 10
x, y = border, border
for i, (label, _) in enumerate(self.menu_actions):
if i == self.select:
# NOTE: you can tint all future draw() and write() using the
# context self.app.tint(<tuple_rgba>)
with self.app.tint(self.highlight):
self.app.write('font-6', x, y, label)
else:
# NOTE: the font-6 is a bitmap font built-in with the library
self.app.write('font-6', x, y, label)
y += self.line_space
```

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

pysdl2-sdl2ui-0.1.5.tar.gz (7.0 kB view details)

Uploaded Source

File details

Details for the file pysdl2-sdl2ui-0.1.5.tar.gz.

File metadata

File hashes

Hashes for pysdl2-sdl2ui-0.1.5.tar.gz
Algorithm Hash digest
SHA256 d576727d58e6ef01c5fafc24504bdd80252d033c824627b4e0cdd51d7b148bdd
MD5 2c7ae6a4481cae1232c2bd433386d16c
BLAKE2b-256 2f5ed9b0ae2c6b264e68258627826bbb762757d07b67020785fc838548050ce2

See more details on using hashes here.

Supported by

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