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

...全文
243 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1
选项卡是自定义,标题栏也是自定义的。允许商用,允许二次开发
特色包括:自定义组件:通过定义 CustomTab 类,创建了可重复使用的选项卡组件,方便管理与展示不同的功能,使得代码结构更加清晰和模块化。用户界面设计:应用程序的界面设计考虑了布局的美观性和实用性,使用了图标和文本,增强了用户体验。顶部区域有明显的标题和功能图标,易于识别。互动性:选项卡的点击事件处理增强了应用的互动性,用户点击不同的选项卡后,可以动态更换页面内容,使得操作更加流畅和直观。还添加了点击选项卡产生墨水效果功能,自定义选项卡视觉效果更加酷炫了。颜色风格:使用丰富的颜色来区分不同的选项和内容,如 GREEN_500 和 GREEN_200,不仅美观,还能有效引导用户注意力。灵活性与可扩展性:通过使用字典 tab_contents 来存储各选项卡的内容,使得后期扩展更为简单,能够轻松添加新的功能或页面。窗体属性设置:通过设置窗口的大小、边框以及可调整性,增强了应用的适应性,提供了更加专注的用户体验(如无边框设计)。响应式布局:整体布局使用了 Flet 提供的响应式控件(如 Row 和 Column),使得元素能够在不同分辨率的窗口中合理排列。UI界面酷炫漂亮
### 应用场景介绍 该代码实现了一个使用 Flet 框架创建的简单圆形头像自定义组件。具体应用场景如下: - **用户界面设计**:在现代用户界面中,圆形头像是一种常见的设计元素,广泛应用于社交应用、个人资料页面等。 - **本地图片展示**:通过加载本地图片文件(如 `logo.png`),可以方便地展示用户的头像或其他图像资源。 - **自定义样式**:通过设置容器和图像的样式属性(如宽度、高度、边框半径、背景颜色等),可以灵活调整头像的外观。 ### 特色说明 1. **圆形头像效果**: - 使用 `ft.Image` 组件加载本地图片,并通过设置 `border_radius` 为宽度的一半(即 50),使图片呈现圆形效果。 2. **容器装饰**: - 使用 `ft.Container` 包裹 `ft.Image`,并通过设置 `border_radius` 和 `bgcolor` 属性,为头像添加一个绿色背景的外边框,增强了视觉效果。 3. **尺寸控制**: - 图片和容器的尺寸都进行了精确设置,确保头像显示在一个固定的区域内,避免布局混乱。 4. **简洁易用**: - 代码结构简单明了,易于理解和扩展。开发者可以根据需要轻松修改图片路径、尺寸、颜色等属性,以适应不同的应用场景。 ### 示例效果 - 页面标题为 "flet本地正方形图片加图像组件实现圆形头像自定义组件模板"。 - 页面中央展示一个带有绿色背景的圆形头像,头像内容为 `logo.png` 文件中的图片。 - 头像周围有轻微的绿色边框,增强了视觉层次感。 ### 扩展建议 - **动态加载图片**:可以通过参数传递或用户上传的方式动态加载不同图片。 - **交互功能**:增加点击头像触发的事件处理,如弹出用户信息窗口等。

19

社区成员

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

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