"""
Constructs, are prepared widget combinations, you can use for common usecases
"""
from pyglet.event import EVENT_HANDLED
import arcade
from arcade.gui.mixins import UIWindowLikeMixin, UIMouseFilterMixin
from arcade.gui.widgets import UILayout, UIAnchorWidget, UITextArea, UIFlatButton
[docs]class UIMessageBox(UIMouseFilterMixin, UIAnchorWidget):
"""
A simple dialog box that pops up a message with buttons to close.
"""
def __init__(self,
*,
width: float,
height: float,
message_text: str,
buttons=("Ok",),
callback=None):
"""
A simple dialog box that pops up a message with buttons to close.
:param width: Width of the message box
:param height: Height of the message box
:param message_text:
:param buttons: List of strings, which are shown as buttons
:param callback: Callback method, will receive the text of the clicked button
"""
space = 5
self._text_area = UITextArea(text=message_text,
width=height - space,
height=width - space,
text_color=arcade.color.BLACK)
button_group = arcade.gui.UIBoxLayout(vertical=False)
for button_text in buttons:
button = UIFlatButton(text=button_text)
button_group.add(button.with_space_around(left=10))
button.on_click = self.on_ok
self._bg_tex = arcade.load_texture(":resources:gui_basic_assets/window/grey_panel.png")
self._callback = callback
group = UILayout(width=width, height=height, children=[
UIAnchorWidget(child=self._text_area, anchor_x="left", anchor_y="top", align_x=10, align_y=-10),
UIAnchorWidget(child=button_group, anchor_x="right", anchor_y="bottom", align_x=-10, align_y=10)
]).with_background(self._bg_tex)
super().__init__(child=group)
def on_ok(self, event):
self.parent.remove(self)
if self._callback is not None:
self._callback(event.source.text)