Beispiel #1
0
 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])
Beispiel #2
0
 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))
     ])
Beispiel #3
0
 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
Beispiel #5
0
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
Beispiel #7
0
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)
    )
Beispiel #8
0
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)
                  ])
        ])
Beispiel #9
0
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()])
    ])
Beispiel #10
0
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')
              ])
    ])
Beispiel #11
0
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="+"),
            ],
        ))
Beispiel #12
0
    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
                          ])
Beispiel #13
0
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')
                 ])
Beispiel #14
0
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='+'),
              ]))
Beispiel #15
0
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
Beispiel #17
0
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"
Beispiel #19
0
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()])
    ])
Beispiel #20
0
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
Beispiel #22
0
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"
Beispiel #23
0
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
Beispiel #24
0
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
Beispiel #26
0
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
Beispiel #28
0
 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()
                 ])