def main(page): # simple donut-like pie chart chart1 = PieChart(width='50%', inner_radius=40, inner_value=42, points=[ Point(color='yellow', value=10), Point(color='green', value=32) ]) # pie chart with legent chart2 = PieChart(width='50%', legend=True, tooltips=True, points=[ Point(legend='Free space', value=10, tooltip='10%'), Point(legend='Total space', value=20, tooltip='20%'), Point(legend='Reserved space', value=30, tooltip='30%'), Point(legend='A:', value=20, tooltip='20%'), Point(legend='B:', value=20, tooltip='20%'), Point(legend='C:', value=20, tooltip='20%') ]) page.add(Text("Donut-like PieChart", size='xLarge'), chart1, Text("PieChart with legend and tooltips", size='xLarge'), chart2)
def on_message(user, message): if user: messages.current.controls.append(Text(f"{user}: {message}")) else: messages.current.controls.append( Text(message, color="#888", size="small", italic=True)) page.update()
def test_link_with_controls(): l = Link( value="Visit google", url="https://google.com", pre=True, align="right", width="100", size="large1", title="Link title", controls=[Text(value="LinkText1"), Text(value="LinkText2")], ) assert isinstance(l, pglet.Control) assert isinstance(l, pglet.Link) assert l.get_cmd_str() == [ Command( indent=0, name=None, values=["link"], attrs={ "align": "right", "pre": "true", "size": "large1", "title": "Link title", "url": "https://google.com", "value": "Visit google", "width": "100", }, lines=[], commands=[], ), Command(indent=2, name=None, values=["text"], attrs={"value": "LinkText1"}, lines=[], commands=[]), Command(indent=2, name=None, values=["text"], attrs={"value": "LinkText2"}, lines=[], commands=[]), ], "Test failed"
def main(page): # Fractions BarChart chart1 = BarChart( data_mode="fraction", width="50%", tooltips=True, points=[ Point( legend="C:", x=20, y=250, x_tooltip="20%", y_tooltip="20 of 250 GB used" ), Point(legend="D:", x=50, y=250, x_tooltip="50%"), Point(legend="E:", x=30, y=250, x_tooltip="30%"), ], ) # Percentage BarChart chart2 = BarChart( data_mode="percentage", width="30%", tooltips=True, points=[ Point(legend="/disk1", x=20, y=100, color="green"), Point(legend="/disk2", x=50, y=100, color="yellow"), Point(legend="/disk3", x=90, y=100, color="red"), ], ) page.add( Text("Fractions BarChart", size="xLarge"), chart1, Text("Percentage BarChart", size="xLarge"), chart2, )
def main(page): # Vertical chart with textual x axis red_point = Point(x='Red', y=20, color='MediumOrchid', legend='Red', y_tooltip='20%') simple_chart = VerticalBarChart(tooltips=True, legend=True, width='50%', height=300, y_ticks=5, bar_width=20, y_format='{y}%', points=[ red_point, Point(x='Green', y=50, color='LimeGreen', legend='Green', y_tooltip='50%'), Point(x='Blue', y=30, color='LightSkyBlue', legend='Blue', y_tooltip='30%') ] ) # Vertical chart with numeric x axis num_chart = VerticalBarChart(y_ticks=5, y_min=0, y_max=100, y_format='{y}%', width='100%', height=400, bar_width=10) page.add( Text("Vertical chart with textual x axis", size='xLarge'), simple_chart, Text("Vertical chart with numeric x axis", size='xLarge'), num_chart, ) for v in range(21, 40): red_point.y = v page.update() time.sleep(0.01) for i in range(0, 100): num_chart.points.append(Point(x=i, y=round(random.random() * 100))) if len(num_chart.points) > 30: num_chart.points.pop(0) page.update() time.sleep(0.05)
def test_show_hide(page): # open page page.add([ Text(id="ctl1", value="Text1"), Text(id="ctl2", value="Text2"), Text(id="ctl3", value="Text3") ]) page.hide("ctl1", "ctl2", "ctl3")
def test_remove_list(page): # open page #page.remove(at=0) page.add([ Text(id="ctl1", value="Text1"), Text(id="ctl2", value="Text2"), Text(id="ctl3", value="Text3") ]) page.remove("ctl1", "ctl2", "ctl3")
def links(): return Stack(gap=20, controls=[ Text("Links", size="xLarge"), Link(url='http://google.com', value='Visit Google', new_window=True), Link(value='Link without URL', size='large'), Link(url='http://google.com', value='Disabled link', disabled=True), Link(url='http://google.com', controls=[ Icon('Globe'), Text(' Link with child controls') ]), link_with_on_click() ])
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 textboxes(): return Stack(gap=20, controls=[ Text("Basic textboxes", size="xLarge"), basic_textboxes(), Text("Multiline textboxes", size="xLarge"), multiline_textboxes(), Text("Underlined and borderless Textboxes", size="xLarge"), underlined_borderless_textboxes(), Text("TextField with prefix and/or suffix", size="xLarge"), suffix_prefix_textboxes() ])
def on_click(e): if e.data in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.'): #start a new sequence in the 'result' textbox if self.start_new == True: self.page.set_value('result', e.data) self.start_new = False #continue exising sequence in the 'result' textbox else: self.page.set_value('result', self.page.get_value('result') + e.data) self.page.append_value(self.history_id, e.data) elif e.data == 'C': self.page.set_value('result', '0') self.operand1 = '0' self.operator = '+' self.start_new = True self.history_id = self.page.add(Text(value='History: ')).id elif e.data in ('+', '-', '*', '/'): self.page.set_value( 'result', calculate(float(self.operand1), float(self.page.get_value('result')), self.operator)) self.operand1 = self.page.get_value('result') self.operator = e.data self.start_new = True self.page.append_value(self.history_id, '=' + self.operand1 + self.operator) elif e.data == '=': self.page.set_value( 'result', calculate(float(self.operand1), float(self.page.get_value('result')), self.operator)) self.operator = '+' self.operand1 = '0' self.start_new = True self.page.append_value(self.history_id, ' = ' + self.page.get_value('result')) self.history_id = self.page.add(Text(value='History: ')).id
def on_click(e): global operand1 global operator global history_id global start_new if e.data in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.'): #start a new sequence in the 'result' textbox if start_new == True: page.set_value('result', e.data) start_new = False #continue exising sequence in the 'result' textbox else: page.set_value('result', page.get_value('result') + e.data) page.append_value(history_id, e.data) elif e.data == 'C': page.set_value('result', '0') operand1 = '0' operator = '+' start_new = True history_id = page.add(Text(value='History: ')).id elif e.data in ('+', '-', '*', '/'): page.set_value( 'result', calculate(float(operand1), float(page.get_value('result')), operator)) operand1 = page.get_value('result') operator = e.data start_new = True page.append_value(history_id, '=' + operand1 + operator) elif e.data == '=': page.set_value( 'result', calculate(float(operand1), float(page.get_value('result')), operator)) operator = '+' operand1 = '0' start_new = True page.append_value(history_id, ' = ' + page.get_value('result')) history_id = page.add(Text(value='History: ')).id
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 test_dialog_add(): d = Dialog(open=True, title='Hello', sub_text='sub_text1', large_header=False, auto_dismiss=True, width=100, max_width=200, height=100, fixed_top=True, blocking=False, data='data1', controls=[Text(value='Are you sure?')], footer=[Button(text='OK'), Button(text="Cancel")]) assert isinstance(d, pglet.Control) assert isinstance(d, pglet.Dialog) assert d.get_cmd_str() == ( 'dialog autoDismiss="true" blocking="false" data="data1" fixedTop="true" ' 'height="100" largeHeader="false" maxWidth="200" open="true" subText="sub_text1" ' 'title="Hello" width="100"\n' ' text value="Are you sure?"\n' ' footer\n' ' button text="OK"\n' ' button text="Cancel"'), "Test failed"
def test_panel_add(): p = Panel( open=True, title="Hello", type="small", auto_dismiss=True, light_dismiss=False, width=100, blocking=False, data="data1", controls=[Text(value="Are you sure?")], footer=[Button(text="OK"), Button(text="Cancel")], ) assert isinstance(p, pglet.Control) assert isinstance(p, pglet.Panel) assert p.get_cmd_str() == [ Command( indent=0, name=None, values=["panel"], attrs={ "autodismiss": "true", "blocking": "false", "data": "data1", "lightdismiss": "false", "open": "true", "title": "Hello", "type": "small", "width": "100", }, lines=[], commands=[], ), Command(indent=2, name=None, values=["text"], attrs={"value": "Are you sure?"}, lines=[], commands=[]), Command(indent=2, name=None, values=["footer"], attrs={}, lines=[], commands=[]), Command(indent=4, name=None, values=["button"], attrs={"text": "OK"}, lines=[], commands=[]), Command(indent=4, name=None, values=["button"], attrs={"text": "Cancel"}, lines=[], commands=[]), ], "Test failed"
def main(page): page.add( Text("Indeterminate Progress", size='xLarge'), Progress("Operation progress", description="Doing something indefinite...", width='50%')) prog1 = Progress("Copying file1.txt to file2.txt", value=0, width='50%') page.add(Text("Default Progress", size='xLarge'), prog1) for i in range(0, 101): prog1.value = i prog1.update() time.sleep(0.005) prog2 = Progress("Provisioning your account", value=0, width='50%') page.add(prog2) prog2.description = "Preparing environment..." prog2.value = 0 prog2.update() time.sleep(2) prog2.description = "Collecting information..." prog2.value = 20 prog2.update() time.sleep(2) prog2.description = "Creatring database entities..." prog2.value = 40 prog2.update() time.sleep(2) prog2.description = "Verifying the data..." prog2.value = 60 prog2.update() time.sleep(2) prog2.description = "Finishing the process, almost done..." prog2.value = 80 prog2.update() time.sleep(2) prog2.description = "Your account has been created!" prog2.value = 100 prog2.update()
def test_link_with_controls(): l = Link(value='Visit google', url='https://google.com', pre=True, align='right', width='100', size='large1', title='Link title', controls=[Text(value='LinkText1'), Text(value='LinkText2')]) assert isinstance(l, pglet.Control) assert isinstance(l, pglet.Link) assert l.get_cmd_str() == ( 'link align="right" pre="true" size="large1" title="Link title" ' 'url="https://google.com" value="Visit google" width="100"\n' ' text value="LinkText1"\n' ' text value="LinkText2"'), "Test failed"
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 say_hello_click(e): name = page.get_value(txt) if name == "": txt.error_message = "Name cannot be blank" btn.text = "Say it again!" page.update(txt, btn) else: page.remove(txt, btn) page.add(Text(value=f'Hello, {name}!'), at=0)
def on_click(e): # we get the entered text name = page.get_value(txt_name) # then cleaning the page page.clean() # and adding the text with our greeting page.add(Text(f"Hello, {name}!"))
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 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 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 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 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 __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 message_with_on_dismiss(): def message_dismissed(e): t.value = "Message dismissed!" stack.update() m = Message(value='Message with on_dismiss event', dismiss=True, on_dismiss=message_dismissed) t = Text() stack = Stack(controls=[m, t]) return stack
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 test_text_double_quotes(): c = Text(value='Hello, "world!"') # raise Exception(c.get_cmd_str()) assert c.get_cmd_str() == [ Command(indent=0, name=None, values=["text"], attrs={"value": 'Hello, "world!"'}, lines=[], commands=[]) ], "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() ])