flet-dev / flet

Flet enables developers to easily build realtime web, mobile and desktop apps in Python. No frontend experience required.
https://flet.dev
Apache License 2.0
11.13k stars 429 forks source link

use tabs will lose some ... #2912

Closed jundaychan closed 4 months ago

jundaychan commented 6 months ago

Description

Code example to reproduce the issue:

(paste your program here)

Describe the results you received:

Describe the results you expected:

Additional information you deem important (e.g. issue happens only occasionally):

Flet version (pip show flet):

(paste your output here)

Give your requirements.txt file (don't pip freeze, instead give direct packages):

(The requirements)

Operating system:

Additional environment details:

from flet_core import MainAxisAlignment import flet as ft

from src.utils.routes_url import TemplateRoutes import flet_easy as fs from flet_contrib.color_picker import ColorPicker

edit_template_page = fs.AddPagesy() @edit_template_page.page(route=TemplateRoutes.EDIT_URL) def edit_template(data: fs.Datasy,temp_name:str): def back_choose(e): e.page.go(TemplateRoutes.MAIN_URL) e.page.update()

def get_row():
    return ft.Row(
        alignment=MainAxisAlignment.START,
        spacing=20,
    )

def get_col():
    return ft.Column(
        alignment=MainAxisAlignment.START,
        spacing=20,

) def get_title(text): return ft.Text(text, theme_style=ft.TextThemeStyle.TITLE_MEDIUM, weight=ft.FontWeight.BOLD)

def __add_video_config(grade):
    rotation = ft.Slider(value=0,min=0,max=360,divisions=360,label="{value}°") # 旋转
    scale = ft.Slider(value=100,min=0,max=200,divisions=300,label="{value}%")
    v = get_row()
    # v.expand = True
    # v.spacing = 20
    v.controls = [ft.Text("旋转角度"),rotation, ft.Text("缩放比例"),scale]
    z = ft.Container(
        content=v,
        alignment=ft.alignment.center,
        padding=ft.padding.only(left=20,bottom=0)
    )
    return z

def __add_text_config(grade):
    color_text = ft.TextField("#ffffff",
        border=ft.InputBorder.UNDERLINE,
        hint_text="请选择颜色",
        width=200
    )
    font = ft.TextField(
        value="宋体",
        border=ft.InputBorder.UNDERLINE,
        hint_text="请输入字体",
        width=200
    )
    color_picker  = ColorPicker(
        color="#000000",
        width=200
    )

    def open_color_picker(e):
        d.open = True
        page.update()

    def change_color(e):
        color_icon.icon_color = color_picker.color
        color_text.value = color_picker.color
        d.open = False
        page.update()

    def close_dialog(e):
        d.open = False
        d.update()

    d = ft.AlertDialog(
        content=color_picker,
        actions=[
            ft.TextButton("OK", on_click=change_color),
            ft.TextButton("Cancel", on_click=close_dialog),
        ],
        actions_alignment=ft.MainAxisAlignment.END,
        on_dismiss=change_color,
    )
    v = get_row()
    color_icon = ft.IconButton(icon=ft.icons.BRUSH, on_click=open_color_picker)
    page.dialog = d
    font_size =ft.TextField(
        value="10",
        input_filter=ft.NumbersOnlyInputFilter(),
        border=ft.InputBorder.UNDERLINE,
        hint_text="请输入字体",
        width=200
    )
    v.controls= [ft.Text("颜色"),color_text,color_icon,ft.Text("字体"),font,ft.Text("字体大小"),font_size]

    new_row1 = get_row()
    x_position = ft.Slider(value=0,min=-3000,max=3000,divisions=6000,label="{value}-------x位置,单位px")
    y_position = ft.Slider(value=0,min=-3000,max=3000,divisions=6000,label="{value}---------y位置,单位px")
    scale_uniform = ft.TextField(
        value="1",
        input_filter=ft.NumbersOnlyInputFilter(),
        border=ft.InputBorder.UNDERLINE,
        hint_text="缩放比例",
        width=200
    )
    new_row1.controls = [ft.Text("x轴位置"),x_position,ft.Text("y轴位置"),y_position,ft.Text("缩放比例"),scale_uniform]
    z = ft.Container(
        content=ft.Column([v,new_row1],alignment=MainAxisAlignment.START,spacing=20),
        alignment=ft.alignment.center,
        padding=ft.padding.only(left=20)
    )

    return z

page = data.page
params = data.url_params
head = ft.Container(content=ft.Row(
                    [
                        ft.TextField(
                            value=temp_name,
                            label="模板名称",
                            text_size=30,
                            border=ft.InputBorder.NONE,
                            hint_text="请输入模板名称"
                        ),
                        ft.Row(
                            [
                                ft.ElevatedButton(
                                    "保存",
                                    icon=ft.icons.SAVE,
                                    on_click=back_choose,
                                ),
                                ft.ElevatedButton(
                                    "返回",
                                    icon=ft.icons.ARROW_BACK,
                                    on_click=back_choose,
                                )
                            ],
                            alignment=MainAxisAlignment.CENTER,
                            spacing=50,
                        ),
                    ],
                    alignment=MainAxisAlignment.SPACE_BETWEEN,
                ),
                padding=10,
            )

ft.Dropdown(
    width=100,
    options=[
        ft.dropdown.Option("Red"),
        ft.dropdown.Option("Green")
    ],
)
video_canvas = ft.Dropdown(
    width=200,
    options=[
        ft.dropdown.Option("1080:1920"),
        ft.dropdown.Option("1920:1080"),
    ],
)
enable_denoise  = ft.Dropdown(
    width=200,
    options=[
        ft.dropdown.Option("开启"),
        ft.dropdown.Option("关闭"),
    ],
)

volume = ft.Slider(min=-100,max=20,divisions=120,label="{value} db",width=200) # 音量

basic_list = [ft.Text("音量"),volume,ft.Text("画布"),video_canvas,ft.Text("降噪"),enable_denoise]
basic = get_row()
basic.controls = basic_list
basic_controls = ft.Container(content=basic,padding=ft.padding.only(left=20))

basic_config = ft.ExpansionTile(
        title=ft.Text("基础设置"),
        subtitle=ft.Text("这里设置视频的基础参数"),
        affinity=ft.TileAffinity.PLATFORM,
        maintain_state=True,
        controls=[basic_controls],
        initially_expanded=True,
        shape=ft.StadiumBorder(),
    )

video_config = ft.ExpansionTile(
        title=ft.Text("视频设置"),
        subtitle=ft.Text("这里设置视频的参数,一级是说普通的视频参数,二级是说重点字词的视频参数,三级是超级重点的字词的视频参数"),
        affinity=ft.TileAffinity.PLATFORM,
        maintain_state=True,
        controls=[],
        initially_expanded=True,
        shape=ft.StadiumBorder(),
    )

video_tabs = ft.Tabs(
    tabs=[
        ft.Tab(
            text="普通句",
            content=__add_video_config("grade1"),
        ),
        ft.Tab(
            text="重点句",
            content=__add_video_config("grade2"),
        ),
        ft.Tab(
            text="超级重点",
            content=__add_video_config("grade3"),
        ),
    ],
    tab_alignment=ft.TabAlignment.FILL,
    expand=True,
)
for i in range(0, 3):
    video_config.controls.append(video_tabs)

text_tabs = ft.Tabs(
    tabs=[
        ft.Tab(
            text="普通",
            content=__add_text_config("grade1"),
        ),
        ft.Tab(
            text="重点字词",
            content=__add_text_config("grade2"),
        ),
        ft.Tab(
            text="超级重点",
            content=__add_text_config("grade3"),
        ),
        ft.Tab(
            text="视频标题",
            content=__add_text_config("grade4"),
        ),
    ],
    tab_alignment=ft.TabAlignment.FILL,
    expand=True,
)

beauty_tabs = ft.Tabs(
    tabs=[
        ft.Tab(
            text="美颜",
            content=__add_video_config("普通"),
        ),
        ft.Tab(
            text="美体",
        ),
        ft.Tab(
            text="美型",
        ),
    ],
    tab_alignment=ft.TabAlignment.FILL,
    expand=True,
)

video_config.controls = [video_tabs]

temp_v = ft.Row(
    [
        head,
        ft.Divider(
            height=1,
        ),
        basic_config,
        ft.Container(
            content=ft.Text("视频设置",size=16),
            padding=ft.padding.only(left=20)
        ),
        video_config,
        text_tabs,
        # beauty_tabs
    ],
    scroll=ft.ScrollMode.AUTO,
    wrap=True,
)

return temp_v
ndonkoHenri commented 6 months ago

Please fill the issue template with all the information.