Esempio n. 1
0
class TodoApp():
    def __init__(self):
        self.tasks = []
        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 add_clicked(self, e):
        task = Task(self, self.new_task.value)
        self.tasks.append(task)
        self.tasks_view.controls.append(task.view)
        self.new_task.value = ''
        self.view.update()

    def delete_task(self, task):
        self.tasks.remove(task)
        self.tasks_view.controls.remove(task.view)
        self.view.update()
Esempio n. 2
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])
Esempio n. 3
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"
Esempio n. 4
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))
     ])
Esempio n. 5
0
class Task:
    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 edit_clicked(self, e):
        self.edit_name.value = self.display_task.label
        self.display_view.visible = False
        self.edit_view.visible = True
        self.view.update()

    def save_clicked(self, e):
        self.display_task.label = self.edit_name.value
        self.display_view.visible = True
        self.edit_view.visible = False
        self.view.update()

    def delete_clicked(self, e):
        self.app.delete_task(self)

    def status_changed(self, e):
        self.app.update()
Esempio n. 6
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
Esempio n. 8
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')
              ])
    ])
Esempio n. 9
0
def test_stack_add():
    s = Stack(controls=[
        Textbox(id="firstName"),
        Textbox(id="lastName")
    ])
    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"'
    ), "Test failed"
Esempio n. 10
0
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
Esempio n. 11
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)
    )
Esempio n. 12
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)
                  ])
        ])
Esempio n. 13
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()])
    ])
Esempio n. 14
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')
              ])
    ])
Esempio n. 15
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
                          ])
Esempio n. 16
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='+'),
              ]))
Esempio n. 17
0
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
Esempio n. 18
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"
Esempio n. 19
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="+"),
            ],
        ))
Esempio n. 20
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')
                 ])
Esempio n. 21
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()])
    ])
Esempio n. 22
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
            ])
    ])
Esempio n. 23
0
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
Esempio n. 24
0
class TodoApp():
    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.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
            ])
        ])

    def update(self):
        status = self.filter.value
        for task in self.tasks:
            task.view.visible = (status == 'all'
                or (status == 'active' and task.display_task.value == False)
                or (status == 'completed' and task.display_task.value))
        self.view.update()

    def add_clicked(self, e):
        task = Task(self, self.new_task.value)
        self.tasks.append(task)
        self.tasks_view.controls.append(task.view)
        self.new_task.value = ''
        self.update()

    def delete_task(self, task):
        self.tasks.remove(task)
        self.tasks_view.controls.remove(task.view)
        self.update()

    def tabs_changed(self, e):
        self.update()        
Esempio n. 25
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"
Esempio n. 26
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
Esempio n. 27
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
Esempio n. 28
0
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
Esempio n. 29
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