基于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界面。

...全文
233 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1
选项卡是自定义,标题栏也是自定义的。允许商用,允许二次开发
特色包括:自定义组件:通过定义 CustomTab 类,创建了可重复使用的选项卡组件,方便管理与展示不同的功能,使得代码结构更加清晰和模块化。用户界面设计:应用程序的界面设计考虑了布局的美观性和实用性,使用了图标和文本,增强了用户体验。顶部区域有明显的标题和功能图标,易于识别。互动性:选项卡的点击事件处理增强了应用的互动性,用户点击不同的选项卡后,可以动态更换页面内容,使得操作更加流畅和直观。还添加了点击选项卡产生墨水效果功能,自定义选项卡视觉效果更加酷炫了。颜色风格:使用丰富的颜色来区分不同的选项和内容,如 GREEN_500 和 GREEN_200,不仅美观,还能有效引导用户注意力。灵活性与可扩展性:通过使用字典 tab_contents 来存储各选项卡的内容,使得后期扩展更为简单,能够轻松添加新的功能或页面。窗体属性设置:通过设置窗口的大小、边框以及可调整性,增强了应用的适应性,提供了更加专注的用户体验(如无边框设计)。响应式布局:整体布局使用了 Flet 提供的响应式控件(如 Row 和 Column),使得元素能够在不同分辨率的窗口中合理排列。UI界面酷炫漂亮
### 应用场景介绍 **Flet实现PyDracula风格UI界面自定义模板** 是一个基于 Flet 框架的 Python 应用程序,旨在提供一个现代化、美观且功能丰富的用户界面。该模板主要适用于以下几种应用场景: - **企业级应用**:适用于企业内部管理系统、数据分析平台等,提供一致且专业的用户界面。 - **个人项目**:适合开发者和个人用户快速搭建个人网站、工具应用等。 - **教育平台**:适用于在线教育平台、学习管理系统等,提供清晰易用的界面设计。 ### 特色说明 1. **PyDracula 风格**: - **暗黑模式**:默认采用 PyDracula 的暗黑主题,提供舒适的夜间使用体验。 - **高对比度**:颜色搭配经过精心设计,确保文字和背景之间的高对比度,提高可读性和用户体验。 - **现代感**:整体设计简洁现代,符合当前流行的 UI 设计趋势。 2. **模块化设计**: - **BasePage 抽象基类**:提供了一个基础的页面结构,方便扩展和复用。 - **多个页面**:包括主页、组件页、新建页、保存页和设置页,每个页面都有独立的功能和布局。 - **灵活的主题切换**:支持暗黑模式、浅色模式和系统模式的动态切换,满足不同用户的需求。 3. **丰富的控件**: - **导航栏**:使用 `NavigationRail` 实现侧边导航栏,支持展开和收起功能,提供多种导航项。 - **卡片布局**:主页使用卡片布局展示统计数据、任务列表等信息,视觉效果良好。 - **按钮和图标**:提供多种按钮和图标控件,增强交互性和美观性。 - **进度条**:使用 `ProgressBar` 显示项目进度,直观易懂。 - **列表项**:使用 `ListTile` 显示
### 应用场景介绍 此应用是一个基于 Flet 框架构建的简单轮播图组件,支持手动切换和自动播放功能。主要应用场景包括但不限于: - **网站或应用首页**:展示最新活动、产品推荐或新闻更新等信息。 - **广告展示**:用于展示不同广告内容,提高用户点击率。 - **产品展示**:在电商网站或应用中,展示产品的多角度视图。 ### 特色说明 1. **手动切换**: - 用户可以通过点击“<”和“>”按钮来手动切换显示的图片。 - 提供了灵活的交互方式,让用户可以根据自己的需求浏览图片。 2. **自动播放**: - 支持自动播放功能,每隔 `AUTO_PLAY_INTERVAL` 秒自动切换到下一张图片。 - 用户可以通过点击“Auto Play”按钮来开启或关闭自动播放功能。 3. **自定义组件**: - 使用 Flet 框架构建,代码结构清晰,易于扩展和维护。 - 可以根据实际需求轻松添加更多的功能或修改现有功能。 4. **响应式设计**: - 使用 `ft.Row` 布局,确保在不同设备上都能良好显示。 - 图片和按钮之间的间距适中,用户体验良好。 5. **异步处理**: - 使用 `asyncio` 处理自动播放任务,确保不会阻塞主线程,保证应用的流畅运行。 ### 使用方法 1. **启动应用**: - 运行 `Flet按钮控制手动轮播和自动轮播结合自定义组件模板.py` 文件,启动 Flet 应用。 2. **手动切换图片**: - 点击“<”按钮切换到上一张图片。 - 点击“>”按钮切换到下一张图片。 3. **自动播放**: - 点击“Auto Play”按钮开启自动播放功能。 - 再次点击“Auto Play”按钮关闭自动播放功能。

19

社区成员

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

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