FletAppDemo/src/gallery/examples/inputs.py

81 lines
2.9 KiB
Python

import flet as ft
from gallery.models import Example
def text_fields() -> ft.Control:
return ft.Column(
controls=[
ft.TextField(label="Имя", hint_text="Алексей", prefix_icon=ft.Icons.PERSON),
ft.TextField(label="Пароль", password=True, can_reveal_password=True),
ft.TextField(label="Комментарий", multiline=True, min_lines=2, max_lines=4),
],
spacing=12,
)
def dropdowns() -> ft.Control:
return ft.Dropdown(
label="Среда",
value="web",
options=[
ft.DropdownOption(key="web", text="Web"),
ft.DropdownOption(key="android", text="Android"),
ft.DropdownOption(key="desktop", text="Desktop"),
],
width=300,
)
def selection_controls() -> ft.Control:
return ft.Column(
controls=[
ft.Checkbox("Получать обновления", value=True),
ft.Switch(label="Автоматическая тема", value=False),
ft.RadioGroup(
value="comfortable",
content=ft.Row(
controls=[
ft.Radio(value="compact", label="Компактно"),
ft.Radio(value="comfortable", label="Удобно"),
]
),
),
]
)
def sliders() -> ft.Control:
value_label = ft.Text("Громкость: 40")
def changed(e: ft.Event[ft.Slider]) -> None:
value_label.value = f"Громкость: {int(e.control.value)}"
value_label.update()
return ft.Column(
controls=[
value_label,
ft.Slider(value=40, min=0, max=100, divisions=10, label="{value}", on_change=changed),
ft.RangeSlider(start_value=20, end_value=75, min=0, max=100, divisions=20),
]
)
def segmented_choice() -> ft.Control:
return ft.SegmentedButton(
segments=[
ft.Segment(value="day", label="День", icon=ft.Icons.LIGHT_MODE),
ft.Segment(value="week", label="Неделя", icon=ft.Icons.DATE_RANGE),
ft.Segment(value="month", label="Месяц", icon=ft.Icons.CALENDAR_MONTH),
],
selected=["week"],
)
EXAMPLES = [
Example("text-fields", "Text fields", "Ввод текста, пароля и многострочного значения.", "Ввод", text_fields),
Example("dropdowns", "Dropdown", "Выбор одного значения из меню.", "Ввод", dropdowns),
Example("selection-controls", "Checkbox, switch и radio", "Булевы и взаимоисключающие варианты.", "Ввод", selection_controls),
Example("sliders", "Sliders", "Одиночный и диапазонный выбор чисел.", "Ввод", sliders),
Example("segmented", "Segmented button", "Компактный выбор режима.", "Ввод", segmented_choice),
]