def __init__(self, app, name): self.app = app self.display_task = Checkbox(value=False, label=name, on_change=self.status_changed) self.edit_name = Textbox(width='100%') self.display_view = Stack( horizontal=True, horizontal_align='space-between', vertical_align='center', controls=[ self.display_task, Stack(horizontal=True, gap='0', controls=[ Button(icon='Edit', title='Edit todo', on_click=self.edit_clicked), Button(icon='Delete', title='Delete todo', on_click=self.delete_clicked) ]), ]) self.edit_view = Stack(visible=False, horizontal=True, horizontal_align='space-between', vertical_align='center', controls=[ self.edit_name, Button(text='Save', on_click=self.save_clicked) ]) self.view = Stack(controls=[self.display_view, self.edit_view])
def create_horizontal_stack(horiz_align): return Stack(controls=[ Text(value=horiz_align), Stack(horizontal=True, horizontal_align=horiz_align, vertical_align='center', gap=20, bgcolor=bg_color, controls=items(3)) ])
def create_vertical_stack(vert_align): return Stack(width='20%', controls=[ Text(value=vert_align), Stack(vertical_align=vert_align, horizontal_align='center', height=300, gap=20, bgcolor=bg_color, controls=items(3)) ])
def change_items_in_choicegroup(): def add_clicked(e): cg.options.append(choicegroup.Option(new_option.value)) new_option.value = '' stack.update() cg = ChoiceGroup() new_option = Textbox(placeholder='Enter new item name') add = Button("Add", on_click=add_clicked) stack = Stack( controls=[cg, Stack(horizontal=True, controls=[new_option, add])]) return stack
def underlined_borderless_textboxes(): return Stack(controls=[ Stack(gap=25, controls=[ Textbox(label='Underlined', underlined=True, placeholder='Enter text here'), Textbox(label='Borderless', borderless=True, placeholder='Enter text here') ]) ])
def change_items_in_dropdown(): def add_clicked(e): d.options.append(dropdown.Option(new_option.value)) d.value = new_option.value new_option.value = '' stack.update() d = Dropdown() new_option = Textbox(placeholder='Enter new item name') add = Button("Add", on_click=add_clicked) stack = Stack( controls=[d, Stack(horizontal=True, controls=[new_option, add])]) return stack
def main(page): page.add( Text('Squares', size='large'), Stack(horizontal=True, controls=[ Text('left top', align='left', vertical_align='top', width=100, height=100, bgcolor='salmon', color='white', padding=5), Text('center top', align='center', vertical_align='top', width=100, height=100, bgcolor='salmon', color='white', padding=5, size='large', border='1px solid #555'), Text('right top', align='right', vertical_align='top', width=100, height=100, bgcolor='salmon', color='white', padding=5, border='2px solid #555') ]), Stack(horizontal=True, controls=[ Text('left center', align='left', vertical_align='center', width=100, height=100, bgcolor='PaleGoldenrod', padding=5), Text('center center', align='center', vertical_align='center', width=100, height=100, bgcolor='PaleGoldenrod', padding=5, size='large', border='1px solid #555'), Text('right center', align='right', vertical_align='center', width=100, height=100, bgcolor='PaleGoldenrod', padding=5, border='2px solid #555') ]), Stack(horizontal=True, controls=[ Text('left bottom', align='left', vertical_align='center', width=100, height=100, bgcolor='PaleGreen', padding=5), Text('center bottom', align='center', vertical_align='center', width=100, height=100, bgcolor='PaleGreen', padding=5, size='large', border='1px solid #555'), Text('right bottom', align='right', vertical_align='center', width=100, height=100, bgcolor='PaleGreen', padding=5, border='2px solid #555') ]), Text('Circles', size='large'), Stack(horizontal=True, controls=[ Text('regular', align='center', vertical_align='center', width=100, height=100, border_radius=50, bgcolor='salmon'), Text('bold italic', bold=True, italic=True, align='center', vertical_align='center', width=100, height=100, border_radius=50, bgcolor='PaleGoldenrod', size='large', border='1px solid #555'), Text('bold', bold=True, align='center', vertical_align='center', width=100, height=100, border_radius=50, bgcolor='PaleGreen', border='2px solid #555') ]), Text('Markdown', size='large'), Text(''' # GitHub Flavored Markdown ## Autolink literals www.example.com, https://example.com, and [email protected]. ## Strikethrough ~one~ or ~~two~~ tildes. ### Code sample ``` import pglet page = page.page() ``` ## Table | a | b | c | d | | - | :- | -: | :-: | ''', markdown=True) )
def sliders(): return Stack( width='50%', controls=[ Stack(controls=[ Text("Horizontal sliders", size="xLarge"), Slider(label='Default slider'), Slider(label='Default disabled slider', disabled=True), Slider(label='Slider with value', show_value=True, value=4), Slider(label='Slider with formatted value', show_value=True, min=0, max=100, value=40, value_format='{value}%'), Slider(show_value=True, label='Origin from zero', min=-5, max=15, step=1, value=-2), slider_with_on_change() ]), Text("Vertical sliders", size='xLarge'), Stack(horizontal=True, height='200px', controls=[ Slider(vertical=True, label='Default slider'), Slider(vertical=True, label='Default disabled slider', disabled=True), Slider(vertical=True, label='Slider with value', show_value=True, value=4), Slider(vertical=True, label='Slider with formatted value', show_value=True, min=0, max=100, value=40, value_format='{value}%'), Slider(vertical=True, show_value=True, label='Origin from zero', min=-5, max=15, step=1, value=-2) ]) ])
def regular_buttons(): return Stack(controls=[ Stack(horizontal=True, controls=[ Button("Standard"), Button("Standard disabled", disabled=True) ]), Stack(horizontal=True, controls=[ Button("Primary", primary=True), Button("Primary disabled", primary=True, disabled=True) ]), Stack(horizontal=True, controls=[button_with_on_click()]) ])
def suffix_prefix_textboxes(): return Stack(controls=[ Stack(gap=25, horizontal=True, controls=[ Textbox(label='With prefix', prefix='https://'), Textbox(label='With suffix', suffix='.com') ]), Stack(horizontal=True, controls=[ Textbox(label='With prefix and suffix', prefix='https://', suffix='.com') ]) ])
def main(page): page.title = "Counter" page.update() def on_click(e): try: count = int(txt_number.value) txt_number.error_message = "" if e.data == "+": txt_number.value = count + 1 elif e.data == "-": txt_number.value = count - 1 except ValueError: txt_number.error_message = "Please enter a number" page.update() txt_number = Textbox(value="0", align="right") page.add( Stack( horizontal=True, controls=[ Button("-", on_click=on_click, data="-"), txt_number, Button("+", on_click=on_click, data="+"), ], ))
def __init__(self): self.new_task = Textbox(placeholder='Whats needs to be done?', width='100%') self.tasks_view = Stack() # application's root control (i.e. "view") containing all other controls self.view = Stack(width='70%', controls=[ Stack(horizontal=True, on_submit=self.add_clicked, controls=[ self.new_task, Button('Add', on_click=self.add_clicked) ]), self.tasks_view ])
def buttons_with_icon(): return Stack(horizontal=True, controls=[ Button("Create account", icon='AddFriend', primary=True), Button("New item", icon='Add'), Button("Delete", icon='Delete') ])
def main(page): page.update(Page(title="Counter")) page.clean() def on_click(e): try: count = int(page.get_value('number')) #if we get here the number is int page.send('set number errorMessage=""') if e.data == '+': page.set_value('number', count + 1) elif e.data == '-': page.set_value('number', count - 1) except ValueError: page.send('set number errorMessage="Please enter a number"') page.add( Stack(horizontal=True, controls=[ Button(text='-', onclick=on_click, data='-'), Textbox(id='number', value='0', align='right'), Button(text='+', onclick=on_click, data='+'), ]))
def test_add_text_inside_stack(): text = Text(id="txt1", value='Hello, "world!"') button = Button(text="Super button") stack = Stack(id="header", controls=[text, button]) assert stack.get_cmd_str() == [ Command(indent=0, name=None, values=["stack"], attrs={"id": ("header", True)}, lines=[], commands=[]), Command( indent=2, name=None, values=["text"], attrs={ "value": 'Hello, "world!"', "id": ("txt1", True) }, lines=[], commands=[], ), Command(indent=2, name=None, values=["button"], attrs={"text": "Super button"}, lines=[], commands=[]), ], "Test failed"
def searchbox_with_search_clear_escape(): def enter_clicked(e): messages.controls.append(Text(f'You have searched for {sb.value}.')) sb.value = '' stack.update() def clear_or_esc_clicked(e): messages.controls.append(Text('You have cleared the box.')) stack.update() sb = SearchBox(placeholder='Search something and click Enter, X or Esc', on_search=enter_clicked, on_clear=clear_or_esc_clicked) messages = Stack() stack = Stack(controls=[sb, messages]) return stack
def test_add_controls_to_another_control(page): stack = Stack(id="stack1", horizontal=True) page.add(stack) t1 = page.add(Textbox(id="firstName", label="First name:"), to=stack, at=0) assert t1.id == "stack1:firstName", "Test failed"
def test_nested_stacks_update(): stack = Stack(controls=[ Textbox(id="firstName"), Textbox(id="lastName"), Stack(horizontal=True, controls=[ Button(id="ok", text="OK"), Button(id="cancel", text="Cancel") ]) ]) # open page p = pglet.page(no_window=True) ctrls = p.add(stack) assert ['_1', 'firstName', 'lastName', '_2', 'ok', 'cancel'] == [ctrls[0].id, ctrls[1].id, ctrls[2].id, ctrls[3].id, ctrls[4].id, ctrls[5].id], "Test failed" # empty update assert stack.get_cmd_str(update=True) == "", "Test failed" # update stack element ctrls[0].horizontal=True assert stack.get_cmd_str(update=True) == '"_1" horizontal="true"', "Test failed" # update inner elements ctrls[1].value = "John" ctrls[2].value = "Smith" ctrls[4].primary = True #raise Exception(stack.get_cmd_str(update=True)) assert stack.get_cmd_str(update=True) == ( '"firstName" value="John"\n' '"lastName" value="Smith"\n' '"ok" primary="true"' ), "Test failed" # assert stack.get_cmd_str(update=True) == ( # 'stack\n' # ' textbox id="firstName"\n' # ' textbox id="lastName"\n' # ' stack horizontal="true"\n' # ' button id="ok" text="OK"\n' # ' button id="cancel" text="Cancel"' # ), "Test failed"
def basic_textboxes(): return Stack(controls=[ Stack(gap=25, horizontal=True, controls=[ Textbox(label='Standard'), Textbox(label='Disabled', disabled=True) ]), Stack(gap=25, horizontal=True, controls=[ Textbox(label='Read-only', read_only=True), Textbox(label="With placeholder", placeholder='Please enter text here') ]), Stack(gap=25, horizontal=True, controls=[ Stack(controls=[ Textbox(label='Required:', required=True), Textbox(required=True) ]), Textbox(label="With error message", error_message='Error message') ]), Stack( gap=25, horizontal=True, controls=[ Textbox(label='With an icon', icon='Emoji2'), #need icon property Textbox(label='Password with reveal button', password=True) ]), Stack(gap=25, horizontal=True, controls=[textbox_with_onchange()]) ])
def multiline_textboxes(): return Stack(controls=[ Stack(gap=25, horizontal=True, controls=[ Textbox(label='standard', multiline=True), Textbox(label='disabled', multiline=True, disabled=True) ]), Stack( gap=25, horizontal=True, controls=[ Textbox(label='With auto adjusted height', multiline=True, auto_adjust_height=True ) #need auto-adjusted height property ]) ])
def checkbox_with_on_change(): def checkbox_changed(e): t.value = f"Checkbox value changed to {c.value}" stack.update() c = Checkbox('Checkbox with on_change event', on_change=checkbox_changed) t = Text() stack = Stack(controls=[c, t]) return stack
def test_splitstack_add(): s = SplitStack( horizontal=True, gutter_size=10, gutter_color="yellow", gutter_hover_color="orange", gutter_drag_color="blue", controls=[Stack(id="left"), Stack(id="center")], ) assert isinstance(s, pglet.Control) assert isinstance(s, pglet.SplitStack) assert s.get_cmd_str() == [ Command( indent=0, name=None, values=["splitstack"], attrs={ "guttercolor": "yellow", "gutterdragcolor": "blue", "gutterhovercolor": "orange", "guttersize": "10", "horizontal": "true", }, lines=[], commands=[], ), Command( indent=2, name=None, values=["stack"], attrs={"id": ("left", True)}, lines=[], commands=[], ), Command( indent=2, name=None, values=["stack"], attrs={"id": ("center", True)}, lines=[], commands=[], ), ], "Test failed"
def slider_with_on_change(): def slider_changed(e): s.data += 1 t.value = f"Slider changed to {int(s.value)}" stack.update() s = Slider('Slider with Change event', on_change=slider_changed, data=0) t = Text() stack = Stack(controls=[s, t]) return stack
def textbox_with_onchange(): def textbox_changed(e): displayed_text.value = entered_text.value stack.update() entered_text = Textbox(label='With onchange event', on_change=textbox_changed) displayed_text = Text() stack = Stack(controls=[entered_text, displayed_text]) return stack
def searchbox_with_change(): def searchbox_changed(e): t.value = f'You have searched for {sb.value}.' stack.update() sb = SearchBox(placeholder='Search something...', on_change=searchbox_changed) t = Text() stack = Stack(controls=[sb, t]) return stack
def main(page): page.title = "Icons example" page.gap = 20 page.update() page.add( Stack(horizontal=True, controls=[ Icon("ChangeEntitlements", color='Magenta20'), Icon("shop", color='CyanBlue10'), Icon("TrainSolid") ]), Stack(horizontal=True, vertical_align='center', controls=[ Icon("BlockedSite", color='Orange20', size=25), Icon("settings", color='Gray20', size=50), Icon("save", color='Blue10', size=100) ]))
def get_stack_controls(search_name): stack_controls = [] found_icon_names = search_icons(search_name) for icon_name in found_icon_names: s = Stack(controls=[ Icon(name = icon_name), Text(value = icon_name) ]) stack_controls.append(s) return stack_controls
def __init__(self): self.tasks = [] self.new_task = Textbox(placeholder="Whats needs to be done?", width="100%") self.tasks_view = Stack() self.filter = Tabs( value="all", on_change=self.tabs_changed, tabs=[Tab(text="all"), Tab(text="active"), Tab(text="completed")], ) self.items_left = Text("0 items left") self.view = Stack( width="70%", controls=[ Text(value="Todos", size="large", align="center"), Stack( horizontal=True, on_submit=self.add_clicked, controls=[ self.new_task, Button(primary=True, text="Add", on_click=self.add_clicked), ], ), Stack( gap=25, controls=[ self.filter, self.tasks_view, Stack( horizontal=True, horizontal_align="space-between", vertical_align="center", controls=[ self.items_left, Button( text="Clear completed", on_click=self.clear_clicked ), ], ), ], ), ], )
def test_nested_stacks_add(): s = Stack(controls=[ Textbox(id="firstName"), Textbox(id="lastName"), Stack(horizontal=True, controls=[ Button(id="ok", text="OK", primary=True), Button(id="cancel", text="Cancel") ]) ]) assert isinstance(s, pglet.Control) assert isinstance(s, pglet.Stack) #raise Exception(s.get_cmd_str()) assert s.get_cmd_str() == ( 'stack\n' ' textbox id="firstName"\n' ' textbox id="lastName"\n' ' stack horizontal="true"\n' ' button id="ok" primary="true" text="OK"\n' ' button id="cancel" text="Cancel"' ), "Test failed"
def checkboxes(): return Stack(gap=20, controls=[ Text("Checkboxes", size="xLarge"), Checkbox(label='Unchecked checkbox', value=False), Checkbox(label='Checked checkbox', value=True), Checkbox(label='Disabled checkbox', disabled=True), Checkbox(label="Checkbox with rendered box_side='End'", box_side='End'), checkbox_with_on_change() ])