基于Flet组件自主创新反复优化打磨后推出的的自定义选项卡自定义标题栏和仿360酷炫漂亮的UI界面模板示例,源代码IDE运行和调试通过

传奇开心果编程
优质创作者: python技术领域
2024-10-06 18:45:28

img

一、示例代码


import flet as ft

class CustomTab:
    def __init__(self, text, icon_path, on_click=None):
        self.text = text
        self.icon_path = icon_path
        self.on_click = on_click
        self.container = None

    def build(self):
        self.container = ft.Container(
            content=ft.Column(
                controls=[
                    ft.Row(
                        controls=[ft.Image(src=self.icon_path, width=64, height=64)],
                        alignment=ft.MainAxisAlignment.CENTER
                    ),
                    ft.Row(
                        controls=[ft.Text(self.text, color=ft.colors.WHITE, size=16)],
                        alignment=ft.MainAxisAlignment.CENTER
                    )
                ],
                alignment=ft.MainAxisAlignment.CENTER,
                spacing=5
            ),
            bgcolor=ft.colors.GREEN_500,
            height=200,
            width=200,
            on_click=self.on_click,
            ink=True  # 确保具有墨水效果
        )
        return self.container

def create_tab(text, icon_path, on_click):
    return CustomTab(text=text, icon_path=icon_path, on_click=on_click).build()

def main(page: ft.Page):
    # 设置窗口的初始大小和样式
    page.window.width = 1220
    page.window.height = 800
    page.window.frameless = True
    page.window.resizable = False

    current_tab = None
    content_container = ft.Column()

    tab_contents = {
        "我的选购": ft.Text("这是我的选购页面", bgcolor=ft.colors.RED),
        "清单详情": ft.Text("这是清单详情页面", bgcolor=ft.colors.ORANGE),
        "添加商品": ft.Text("这是添加商品页面", bgcolor=ft.colors.GREEN),
        "保存商品": ft.Text("这是保存商品页面", bgcolor=ft.colors.BLUE),
        "删除商品": ft.Text("这是删除商品页面", bgcolor=ft.colors.PURPLE),
        "联系我们": ft.Text("这是联系我们页面", bgcolor=ft.colors.YELLOW),
    }

    def tab_clicked(e):
        nonlocal current_tab
        tab_text = e.control.content.controls[1].controls[0].value
        print(f"{tab_text} tab clicked")

        if current_tab:
            current_tab.bgcolor = ft.colors.GREEN_500
        
        current_tab = e.control
        current_tab.bgcolor = ft.colors.GREEN_200
        page.update()

        content_container.clean()
        content_container.controls.append(tab_contents[tab_text])
        page.update()

    # 创建顶部标题栏
    def create_app_title():
        app_title_row = ft.Row(
            controls=[
                ft.IconButton(ft.icons.SHOPPING_CART, tooltip="购物车", icon_color=ft.colors.WHITE),
                ft.Text("购物清单助手桌面程序1.0", color=ft.colors.WHITE, size=16)
            ],
            alignment=ft.MainAxisAlignment.START
        )
        close_button = ft.IconButton(
            ft.icons.CLOSE,
            tooltip="关闭",
            icon_color=ft.colors.RED,
            on_click=lambda e: page.window.close()
        )
        icons_row = ft.Row(
            controls=[
                ft.IconButton(ft.icons.HOME, tooltip="首页", icon_color=ft.colors.WHITE),
                ft.IconButton(ft.icons.SEARCH, tooltip="搜索", icon_color=ft.colors.WHITE),
                ft.IconButton(ft.icons.SETTINGS, tooltip="设置", icon_color=ft.colors.WHITE),
                close_button
            ],
            alignment=ft.MainAxisAlignment.END
        )
        top_row_container = ft.Container(
            content=ft.Row(
                controls=[app_title_row, icons_row],
                alignment=ft.MainAxisAlignment.SPACE_BETWEEN,
                height=50,
                width=1220
            ),
            bgcolor=ft.colors.GREEN_500,
            padding=10,
        )
        return top_row_container

    # 创建标签栏
    def create_tabs():
        tabs = ft.Row(
            [
                create_tab(text="我的选购", icon_path="gg.png", on_click=tab_clicked),
                create_tab(text="清单详情", icon_path="hh.png", on_click=tab_clicked),
                create_tab(text="添加商品", icon_path="ii.png", on_click=tab_clicked),
                create_tab(text="保存商品", icon_path="jj.png", on_click=tab_clicked),
                create_tab(text="删除商品", icon_path="kk.png", on_click=tab_clicked),
                create_tab(text="联系我们", icon_path="ll.png", on_click=tab_clicked),
            ],
            alignment=ft.MainAxisAlignment.START,
            spacing=0,
            width=1200
        )
        return tabs

    # 创建布局
    layout_column = ft.Column(
        controls=[create_app_title(), create_tabs()],
        spacing=0
    )

    page.add(layout_column, content_container)

ft.app(target=main)

二、解释说明

这段代码的特色包括:

自定义组件:通过定义 CustomTab 类,创建了可重复使用的选项卡组件,方便管理与展示不同的功能,使得代码结构更加清晰和模块化。

用户界面设计:应用程序的界面设计考虑了布局的美观性和实用性,使用了图标和文本,增强了用户体验。顶部区域有明显的标题和功能图标,易于识别。

互动性:选项卡的点击事件处理增强了应用的互动性,用户点击不同的选项卡后,可以动态更换页面内容,使得操作更加流畅和直观。还添加了点击选项卡产生墨水效果功能,自定义选项卡视觉效果更加酷炫了。

颜色风格:使用丰富的颜色来区分不同的选项和内容,如 GREEN_500 和 GREEN_200,不仅美观,还能有效引导用户注意力。

灵活性与可扩展性:通过使用字典 tab_contents 来存储各选项卡的内容,使得后期扩展更为简单,能够轻松添加新的功能或页面。

窗体属性设置:通过设置窗口的大小、边框以及可调整性,增强了应用的适应性,提供了更加专注的用户体验(如无边框设计)。

响应式布局:整体布局使用了 Flet 提供的响应式控件(如 Row 和 Column),使得元素能够在不同分辨率的窗口中合理排列。

这些特色结合在一起,形成了一个结构清晰、易于使用且具备漂亮美观用户界面的桌面应用程序UI界面。

...全文
552 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1
选项卡是自定义,标题栏也是自定义的。允许商用,允许二次开发
特色包括:自定义组件:通过定义 CustomTab 类,创建了可重复使用的选项卡组件,方便管理与展示不同的功能,使得代码结构更加清晰和模块化。用户界面设计:应用程序的界面设计考虑了布局的美观性和实用性,使用了图标和文本,增强了用户体验。顶部区域有明显的标题和功能图标,易于识别。互动性:选项卡的点击事件处理增强了应用的互动性,用户点击不同的选项卡后,可以动态更换页面内容,使得操作更加流畅和直观。还添加了点击选项卡产生墨水效果功能,自定义选项卡视觉效果更加酷炫了。颜色风格:使用丰富的颜色来区分不同的选项和内容,如 GREEN_500 和 GREEN_200,不仅美观,还能有效引导用户注意力。灵活性与可扩展性:通过使用字典 tab_contents 来存储各选项卡的内容,使得后期扩展更为简单,能够轻松添加新的功能或页面。窗体属性设置:通过设置窗口的大小、边框以及可调整性,增强了应用的适应性,提供了更加专注的用户体验(如无边框设计)。响应式布局:整体布局使用了 Flet 提供的响应式控件(如 Row 和 Column),使得元素能够在不同分辨率的窗口中合理排列。UI界面酷炫漂亮
Flet自定义选项卡CustomTab Pro组合自定义标题栏CustomAppbar实现的仿360桌面程序界面自定义UI模板中文版解释说明 这个自定义UI模板的特色包括: 1. 自定义组件:通过定义 CustomTab 类,创建了可重复使用的选项卡组件,方便管理与展示不同的功能,使得代码结构更加清晰和模块化。 2. 用户界面设计:应用程序的界面设计考虑了布局的美观性和实用性,使用了图标和文本,增强了用户体验。顶部区域有明显的标题和功能图标,易于识别。 3. 互动性:选项卡的点击事件处理增强了应用的互动性,用户点击不同的选项卡后,可以动态更换页面内容,使得操作更加流畅和直观。还添加了点击选项卡产生墨水效果功能,自定义选项卡视觉效果更加酷炫了。 4. 颜色风格:使用丰富的颜色来区分不同的选项和内容,如 GREEN_500 和 GREEN_200,不仅美观,还能有效引导用户注意力。 5. 灵活性与可扩展性:通过使用字典 tab_contents 来存储各选项卡的内容,使得后期扩展更为简单,能够轻松添加新的功能或页面。 6. 窗体属性设置:通过设置窗口的大小、边框以及可调整性,增强了应用的适应性,提供了更加专注的用户体验(如无边框设计)。 7. 响应式布局:整体布局使用了 Flet 提供的响应式控件(如 Row 和 Column),使得元素能够在不同分辨率的窗口中合理排列。 这些特色结合在一起,形成了一个结构清晰、易于使用且具备漂亮美观用户界面的桌面应用程序UI界面运行效果,截图为证。
### 应用场景介绍 这段代码是一个Flet图像手工滚动轮播组件自定义模板,它的应用场景是图像展示应用。它创建了一个包含多个图像的界面,每个图像都是一个自定义的`MyImg`类的实例,该类继承自`ft.Image`。`MyImg`类允许开发者自定义图像的宽度、高度、填充方式、重复方式和边框半径等属性。 ### 特色说明 1. **自定义图像类**:通过继承`ft.Image`类,开发者可以创建自定义的图像类,以便在应用程序中使用。这使得开发者可以轻松地为图像添加特定的样式和行为。 2. **灵活的布局**:使用`ft.Row`类创建了一个水平布局的容器,可以容纳多个图像。通过设置`expand`、`wrap`、`scroll`等属性,开发者可以控制容器的布局和滚动行为。 3. **响应式设计**:Flet库支持响应式设计,可以根据设备屏幕的大小自动调整界面的布局和元素的大小。这使得开发者可以创建适应不同设备的应用程序。 4. **跨平台支持**:Flet库支持在Windows、macOS和Linux等操作系统上运行,开发者只需要编写一次代码,就可以在不同的平台上运行。 5. **易于使用**:Flet库提供了丰富的UI组件和布局选项,开发者可以轻松地创建复杂的用户界面。此外,Flet库还支持实时预览和调试,使得开发者可以快速地迭代和优化应用程序。 总的来说,这段代码展示了一个使用Flet库创建的图像手工滚动轮播组件自定义模板,是图像展示应用组件的有机组成部分,它具有自定义图像类、灵活的布局、响应式设计和跨平台支持等特色。
#### 应用场景 这个应用程序使用 Flet 框架创建了一个自定义标题栏。主要应用场景包括: 1. **桌面应用开发**:适用于需要自定义界面和功能的桌面应用程序。 2. **企业内部工具**:可以用于开发企业内部的各种管理工具,如库存管理系统、客户关系管理系统等。 3. **教育软件**:可以用于开发教育相关的软件,如在线课程平台、学习管理系统等。 4. **个人项目**:适合个人开发者用于创建各种小型或中型项目,如个人笔记应用、任务管理器等。 #### 特色说明 1. **自定义标题栏**: - **图标按钮**:标题栏包含多个图标按钮,如购物车、添加、帮助、关于和关闭按钮。每个按钮都有相应的提示文本和点击事件处理。 - **文字标题**:标题栏中央显示应用程序的名称“Flet自定义标题栏Custom Title Bar”,并设置为白色字体。 - **布局灵活**:使用 `ft.Row` 控件实现标题栏的布局,可以轻松调整各个控件的位置和对齐方式。 2. **无边框窗口**: - 通过 `page.window.frameless = True` 设置窗口为无边框模式,使应用程序看起来更加现代化和简洁。 3. **颜色和样式**: - 标题栏背景色设置为绿色 (`Colors.GREEN_500`),按钮和文字的颜色也进行了自定义,使界面更加美观和一致。 4. **事件处理**: - 每个按钮都绑定了点击事件处理函数,例如点击“添加”按钮会打印“添加按钮点击”,点击“关闭”按钮会关闭窗口。 5. **响应式设计**: - 使用 `ft.Container` 和 `ft.Row` 控件,可以轻松实现响应式布局,使应用程序在不同屏幕尺寸下都能良好显示。

19

社区成员

发帖
与我相关
我的任务
社区描述
近期,感兴趣Ant Design Mobile of React、Vant of Vue 、MUI of h5App、WeUI 原生微信小程序和beeware移动应用开发,发布原创博文创建专栏发布动态
androidios微信小程序 个人社区 甘肃省·酒泉市
社区管理员
  • 传奇开心果编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧