Source code for miniworlds.worlds.gui.console

import miniworlds.worlds.gui.toolbar as toolbar
import miniworlds.actors.widgets.label as label
import miniworlds.actors.widgets as widgets


[docs] class Console(toolbar.Toolbar): """A scrolling text console that can be docked to a world. Use ``console.newline(text)`` to append lines of text. The console is a special ``Toolbar`` that is typically docked below or beside the main world using ``world.camera.add_bottom(console)`` or ``world.camera.add_right(console)``. Examples: .. code-block:: python from miniworlds import * world = World(200, 200) console = Console() world.camera.add_bottom(console) @world.register def act(self): console.newline("Frame: " + str(world.frame)) world.run() """
[docs] def __init__(self): """Creates a console toolbar with compact text rows. The console starts with a small default height and is intended for short log messages such as score changes, instructions, or debug output. """ super().__init__() self.max_lines = 2 self.text_size = 13 self.row_margin = 5 self.rows = ( (self.max_lines) * (self.row_height + self.row_margin) + self.padding_top + self.padding_bottom )
[docs] def newline(self, text) -> "label.Label": """Appends a new line of text to the console. Each call adds one label row. Older lines scroll up when the console is full. Args: text: The text string to display on the new line. Returns: The ``Label`` actor that was created for this line. Examples: .. code-block:: python console.newline("Player position: " + str(player.position)) """ line = label.Label(text) self.add(line) return line
def _add_widget( self, widget: "widgets.ButtonWidget", key: str = None, ) -> "widgets.ButtonWidget": widget.margin_bottom = self.row_margin widget.margin_top = 0 super()._add_widget(widget, key) return widget