August'24: Kamaelia is in maintenance mode and will recieve periodic updates, about twice a year, primarily targeted around Python 3 and ecosystem compatibility. PRs are always welcome. Latest Release: 1.14.32 (2024/3/24)

Kamaelia.UI.Pygame.Text

Pygame components for text input and display

TextDisplayer displays any data it receives on a Pygame surface. Every new piece of data is displayed on its own line, and lines wrap automatically.

Textbox displays user input while the user types, and sends its string buffer to its 'outbox' when it receives a ' '.

Example Usage

To take user input in Textbox and display it in TextDisplayer:

Pipeline(Textbox(size = (800, 300),
                 position = (0,0)),
         TextDisplayer(size = (800, 300),
                       position = (0,340))
         ).run()

How does it work?

TextDisplayer requests a display from the Pygame Display service and requests that Pygame Display send all keypresses to it. Every time TextDisplayer receives a keypress, it updates its string buffer and the display.

If it receives a newline, or if text must wrap, it moves the existing text upwards and blits the new line onto the bottom.

Known issues

The line wrapping length is specified by the width of the display divided by the width of the letter 'a' in the displayed font, so lines may wrap too far off the edge of the screen if the user types very narrow text (i.e. just spaces with no other charachters), or too far inside the edge of the screen (usually).


Kamaelia.UI.Pygame.Text.TextDisplayer

class TextDisplayer(Axon.Component.component)

TextDisplayer(...) -> new TextDisplayer Pygame component.

Keyword arguments:

  • size -- (w, h) size of the TextDisplayer surface, in pixels.

    Default (500, 300).

  • text_height -- font size. Default 18.

  • bgcolour -- tuple containing RGB values for the background color.

    Default is a pale yellow.

  • fgcolour -- tuple containing RGB values for the text color.

    Default is black.

  • position -- tuple containing x,y coordinates of the surface's

    upper left corner in relation to the Pygame window. Default (0,0)

Inboxes

  • control : shutdown handling
  • _quitevents : user-generated quit events
  • _surface : for PygameDisplay to send surfaces to
  • inbox : for incoming lines of text

Outboxes

  • outbox : not used
  • signal : propagates out shutdown signals
  • _pygame : for sending requests to PygameDisplay

Methods defined here

Warning!

You should be using the inbox/outbox interface, not these methods (except construction). This documentation is designed as a roadmap as to their functionalilty for maintainers and new component developers.

__init__(self, **argd)

Initialises

initPygame(self, **argd)

requests a display surface from the PygameDisplay service, fills the color in, and copies it

main(self)

Main loop

needShutdown(self)

Checks for control messages

update(self, text)

Updates text to the bottom of the screen while scrolling old text upwards. Delegates most of the work to updateLine

updateLine(self, line)

Updates one line of text to bottom of screen, scrolling old text upwards.

Kamaelia.UI.Pygame.Text.Textbox

class Textbox(TextDisplayer)

Textbox(...) -> New Pygame Textbox component

Keyword Arguments:

  • Textbox inherits its keyword arguments from TextDisplayer. Please see TextDisplayer docs.

Reads keyboard input and updates it on the screen. Flushes string buffer and sends it to outbox when a newline is encountered.

Inboxes

  • control : shutdown handling
  • _quitevents : user-generated quit events
  • _events : key events
  • _surface : for PygameDisplay to send surfaces to
  • inbox : for incoming lines of text

Outboxes

  • outbox : not used
  • signal : propagates out shutdown signals
  • _pygame : for sending requests to PygameDisplay

Methods defined here

Warning!

You should be using the inbox/outbox interface, not these methods (except construction). This documentation is designed as a roadmap as to their functionalilty for maintainers and new component developers.

main(self)

Requests a surface from PygameDisplay and registers to listen for events Then enters the main loop, which checks for Pygame events and updates them to the screen.

setText(self, text)

erases the screen and updates it with text

Methods inherited from Kamaelia.UI.Pygame.Text.TextDisplayer :

Feedback

Got a problem with the documentation? Something unclear that could be clearer? Want to help improve it? Constructive criticism is very welcome - especially if you can suggest a better rewording!

Please leave you feedback here in reply to the documentation thread in the Kamaelia blog.

-- Automatic documentation generator, 05 Jun 2009 at 03:01:38 UTC/GMT