Module albow.dialog.DialogUtilities
Source code
import textwrap
from albow.widgets.Button import Button
from albow.widgets.Label import Label
from albow.dialog.Dialog import Dialog
from albow.layout.Row import Row
from albow.layout.Column import Column
from albow.input.TextField import TextField
DEFAULT_ASK_RESPONSES = ["OK", "Cancel"]
def wrapped_label(text, wrap_width, **kwds) -> Label:
"""
Constructs a `albow.widgets.Label` widget from the given text after using the ``textwrap`` module to wrap it to
the specified width in
characters.
Additional keyword parameters are passed to the Label constructor.
Args:
text: The text to wrap in a label
wrap_width: The wrap width
**kwds: Pass these to the Label constructor
Returns: A Label widget
"""
paras = text.split("\n\n")
text = "\n".join([textwrap.fill(para, wrap_width) for para in paras])
return Label(text, **kwds)
def alert(theMessage: str, theWrapWidth=60, **kwds):
"""
Displays a message in a modal dialog, wrapped to the specified width in characters. The dialog can be dismissed by
pressing Return, Enter or Escape.
Args:
theMessage: The alert message to display
theWrapWidth: The wrap width in characters
**kwds: Additional keyword parameters passed to the `albow.dialog.Dialog` constructor.
"""
ask(theMessage, ["OK"], wrap_width=theWrapWidth, **kwds)
def ask(theMessage: str, theResponses=None, default=0, cancel=-1, wrap_width=60, **kwds):
"""
Displays a message in a modal dialog with a set of buttons labelled with the specified responses. Clicking a
button causes the ask function to return the corresponding response string as its value. The default and
cancel parameters are indexes into the response list specifying the values to be returned by Return/Enter
and Escape, respectively.
Args:
theMessage: The message to display
theResponses: Possible responses
default: The index to the default message
cancel: The index to the cancel message
wrap_width: The wrap width in characters
**kwds: Additional keyword parameters passed to the Dialog constructor.
Returns: The dialog modal result
"""
#
# Fix 'Mutable default arguments'
#
if theResponses is None:
theResponses = DEFAULT_ASK_RESPONSES
box = Dialog(**kwds)
d = box.margin
lb = wrapped_label(theMessage, wrap_width)
lb.topleft = (d, d)
buts = []
for caption in theResponses:
but = Button(caption, action=lambda x=caption: box.dismiss(x))
buts.append(but)
brow = Row(buts, spacing=d, equalize='w')
lb.width = max(lb.width, brow.width)
col = Column([lb, brow], spacing=d, align='r')
col.topleft = (d, d)
if default is not None:
box.enter_response = theResponses[default]
else:
box.enter_response = None
if cancel is not None:
box.cancel_response = theResponses[cancel]
else:
box.cancel_response = None
box.add(col)
box.shrink_wrap()
return box.present()
def input_text(thePrompt: str, theInputWidth: int, theDefaultInput: str = None, **kwds):
"""
Presents a modal dialog containing the given prompt and a text field. The theInputWidth is the width of
the text field, and the theDefaultInput, if any, is its initial contents. If the dialog is dismissed by pressing
Return or Enter, the contents of the text field is returned. If it is dismissed by pressing Escape, None
is returned.
Args:
thePrompt: The message to prompt with
theInputWidth: The width of the input text widget
theDefaultInput: A possible default input
**kwds: Additional keyword parameters passed to the Dialog constructor.
Returns: The value that the user input
"""
box = Dialog(**kwds)
d = box.margin
def ok():
box.dismiss(True)
def cancel():
box.dismiss(False)
lb = Label(thePrompt)
lb.topleft = (d, d)
tf = TextField(theInputWidth)
if theDefaultInput:
tf.set_text(theDefaultInput)
tf.enter_action = ok
tf.escape_action = cancel
tf.top = lb.top
tf.left = lb.right + 5
box.add(lb)
box.add(tf)
tf.focus()
box.shrink_wrap()
if box.present():
return tf.get_text()
else:
return None
Functions
def alert(theMessage, theWrapWidth=60, **kwds)
-
Displays a message in a modal dialog, wrapped to the specified width in characters. The dialog can be dismissed by pressing Return, Enter or Escape.
Args
theMessage
- The alert message to display
theWrapWidth
- The wrap width in characters
**kwds
- Additional keyword parameters passed to the
albow.dialog.Dialog
constructor.
Source code
def alert(theMessage: str, theWrapWidth=60, **kwds): """ Displays a message in a modal dialog, wrapped to the specified width in characters. The dialog can be dismissed by pressing Return, Enter or Escape. Args: theMessage: The alert message to display theWrapWidth: The wrap width in characters **kwds: Additional keyword parameters passed to the `albow.dialog.Dialog` constructor. """ ask(theMessage, ["OK"], wrap_width=theWrapWidth, **kwds)
def ask(theMessage, theResponses=None, default=0, cancel=-1, wrap_width=60, **kwds)
-
Displays a message in a modal dialog with a set of buttons labelled with the specified responses. Clicking a button causes the ask function to return the corresponding response string as its value. The default and cancel parameters are indexes into the response list specifying the values to be returned by Return/Enter and Escape, respectively.
Args
theMessage
- The message to display
theResponses
- Possible responses
default
- The index to the default message
cancel
- The index to the cancel message
wrap_width
- The wrap width in characters
**kwds
- Additional keyword parameters passed to the Dialog constructor.
Returns
:The
dialog
modal
result
Source code
def ask(theMessage: str, theResponses=None, default=0, cancel=-1, wrap_width=60, **kwds): """ Displays a message in a modal dialog with a set of buttons labelled with the specified responses. Clicking a button causes the ask function to return the corresponding response string as its value. The default and cancel parameters are indexes into the response list specifying the values to be returned by Return/Enter and Escape, respectively. Args: theMessage: The message to display theResponses: Possible responses default: The index to the default message cancel: The index to the cancel message wrap_width: The wrap width in characters **kwds: Additional keyword parameters passed to the Dialog constructor. Returns: The dialog modal result """ # # Fix 'Mutable default arguments' # if theResponses is None: theResponses = DEFAULT_ASK_RESPONSES box = Dialog(**kwds) d = box.margin lb = wrapped_label(theMessage, wrap_width) lb.topleft = (d, d) buts = [] for caption in theResponses: but = Button(caption, action=lambda x=caption: box.dismiss(x)) buts.append(but) brow = Row(buts, spacing=d, equalize='w') lb.width = max(lb.width, brow.width) col = Column([lb, brow], spacing=d, align='r') col.topleft = (d, d) if default is not None: box.enter_response = theResponses[default] else: box.enter_response = None if cancel is not None: box.cancel_response = theResponses[cancel] else: box.cancel_response = None box.add(col) box.shrink_wrap() return box.present()
def input_text(thePrompt, theInputWidth, theDefaultInput=None, **kwds)
-
Presents a modal dialog containing the given prompt and a text field. The theInputWidth is the width of the text field, and the theDefaultInput, if any, is its initial contents. If the dialog is dismissed by pressing Return or Enter, the contents of the text field is returned. If it is dismissed by pressing Escape, None is returned.
Args
thePrompt
-
The message to prompt with
theInputWidth
- The width of the input text widget
theDefaultInput
- A possible default input
**kwds
- Additional keyword parameters passed to the Dialog constructor.
Returns
:The
value
that
the
user
input
Source code
def input_text(thePrompt: str, theInputWidth: int, theDefaultInput: str = None, **kwds): """ Presents a modal dialog containing the given prompt and a text field. The theInputWidth is the width of the text field, and the theDefaultInput, if any, is its initial contents. If the dialog is dismissed by pressing Return or Enter, the contents of the text field is returned. If it is dismissed by pressing Escape, None is returned. Args: thePrompt: The message to prompt with theInputWidth: The width of the input text widget theDefaultInput: A possible default input **kwds: Additional keyword parameters passed to the Dialog constructor. Returns: The value that the user input """ box = Dialog(**kwds) d = box.margin def ok(): box.dismiss(True) def cancel(): box.dismiss(False) lb = Label(thePrompt) lb.topleft = (d, d) tf = TextField(theInputWidth) if theDefaultInput: tf.set_text(theDefaultInput) tf.enter_action = ok tf.escape_action = cancel tf.top = lb.top tf.left = lb.right + 5 box.add(lb) box.add(tf) tf.focus() box.shrink_wrap() if box.present(): return tf.get_text() else: return None
def wrapped_label(text, wrap_width, **kwds)
-
Constructs a
albow.widgets.Label
widget from the given text after using thetextwrap
module to wrap it to the specified width in characters. Additional keyword parameters are passed to the Label constructor.Args
text
-
The text to wrap in a label
wrap_width
- The wrap width
**kwds
-
Pass these to the Label constructor
Returns
:A
Label
widget
Source code
def wrapped_label(text, wrap_width, **kwds) -> Label: """ Constructs a `albow.widgets.Label` widget from the given text after using the ``textwrap`` module to wrap it to the specified width in characters. Additional keyword parameters are passed to the Label constructor. Args: text: The text to wrap in a label wrap_width: The wrap width **kwds: Pass these to the Label constructor Returns: A Label widget """ paras = text.split("\n\n") text = "\n".join([textwrap.fill(para, wrap_width) for para in paras]) return Label(text, **kwds)