Source code for arcade.gui.experimental.password_input
from __future__ import annotations
from arcade.gui.events import UIEvent, UITextInputEvent
from arcade.gui.surface import Surface
from arcade.gui.widgets.text import UIInputText
[docs]
class UIPasswordInput(UIInputText):
"""A password input field. The text is hidden with asterisks.
Hint: It is recommended to set a background color to prevent full render cycles
when the caret blinks.
"""
[docs]
def on_event(self, event: UIEvent) -> bool | None:
"""Remove new lines from the input, which are not allowed in passwords."""
if isinstance(event, UITextInputEvent):
event.text = event.text.replace("\n", "").replace("\r", "")
return super().on_event(event)
[docs]
def do_render(self, surface: Surface):
"""Override to render the text as asterisks."""
self.layout.begin_update()
position = self.caret.position
text = self.text
self.text = "*" * len(self.text)
super().do_render(surface)
self.text = text
self.caret.position = position
self.layout.end_update()