百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Flet 界面设计1:用Column、Row和Container控件设计“计算器”

liuian 2025-02-27 15:51 33 浏览

为回应网友和粉丝咨询,本期使用 Flet 几个常用的“布局”控件,设计一个漂亮的“计算器”界面,从这个例子中,就可以掌握常用的 界面 设计技巧了。

一个真实的应用,会设计多个界面,各界面有相同的部分,这就需要界面复用了,这个下期再讲。今天主要分享 Column、Row和Container 这3个控件,用他们就足够设计一个漂亮的“计算器”了。下面,循序渐进地设计和优化界面:

循序渐进第一步:不用任何布局控件,直接用最原始的 page.add(),看看是什么样子

import flet as ft

def main(page: ft.Page):
    page.title = "我的计算器" # 定义标题
    result = ft.Text(value="0") # 计算结果存在着“文本”控件中

    # 一口气添加计算器所有按钮
    page.add(
        result,
        ft.ElevatedButton(text="AC"),
        ft.ElevatedButton(text="+/-"),
        ft.ElevatedButton(text="%"),
        ft.ElevatedButton(text="/"),
        ft.ElevatedButton(text="7"),
        ft.ElevatedButton(text="8"),
        ft.ElevatedButton(text="9"),
        ft.ElevatedButton(text="*"),
        ft.ElevatedButton(text="4"),
        ft.ElevatedButton(text="5"),
        ft.ElevatedButton(text="6"),
        ft.ElevatedButton(text="-"),
        ft.ElevatedButton(text="1"),
        ft.ElevatedButton(text="2"),
        ft.ElevatedButton(text="3"),
        ft.ElevatedButton(text="+"),
        ft.ElevatedButton(text="0"),
        ft.ElevatedButton(text="."),
        ft.ElevatedButton(text="="),
    )

ft.app(target=main)

按vscode的F5键,运行看效果如下:

直接用 page.add(),元素都在1列中,界面很丑很不合理,这显然不是我们需要的。但这也说明一个问题:就是 Flet 界面布局,默认是一个 “列”,记住这个特性。

循序渐进第二步:使用“行”布局控件Row,把以上按钮,分布在多个“行”中间。当然,控件Row 也需要 add 到根控件 page 中。Row 控件 用数组容纳子控件,务必用数组 [ ]

import flet as ft

def main(page: ft.Page):
    page.title = "我的计算器" # 定义标题
    result = ft.Text(value="0") # 计算结果存在着“文本”控件中

    # 一口气添加多个 Row 控件
    page.add(
        # Row 控件 用数组容纳子控件,务必用数组 [ ] 
        # 把计算结果单独放在一行中
        ft.Row(controls=[result,]), 
        # 把 AC、+/-、%、/   这4个按钮,放在单独一行中
        ft.Row(controls=[
                ft.ElevatedButton(text="AC"),
                ft.ElevatedButton(text="+/-"),
                ft.ElevatedButton(text="%"),
                ft.ElevatedButton(text="/"),
            ]
        ),
        # 如法炮制,把其他按钮也分组到各自单独的行中,如下:
        ft.Row(
            controls=[
                ft.ElevatedButton(text="7"),
                ft.ElevatedButton(text="8"),
                ft.ElevatedButton(text="9"),
                ft.ElevatedButton(text="*"),
            ]
        ),
        ft.Row(
            controls=[
                ft.ElevatedButton(text="4"),
                ft.ElevatedButton(text="5"),
                ft.ElevatedButton(text="6"),
                ft.ElevatedButton(text="-"),
            ]
        ),
        ft.Row(
            controls=[
                ft.ElevatedButton(text="1"),
                ft.ElevatedButton(text="2"),
                ft.ElevatedButton(text="3"),
                ft.ElevatedButton(text="+"),
            ]
        ),
        ft.Row(
             controls=[
                ft.ElevatedButton(text="0"),
                ft.ElevatedButton(text="."),
                ft.ElevatedButton(text="="),
            ]
        ),
    )

ft.app(target=main)

按vscode的F5键,运行看效果如下:

用 “行”控件Row,对按钮进行分行呈现后,美观多了,但还是不够漂亮。

循序渐进第三步:用 “列”控件Column 和 “容器”控件Container,进一步美化界面。

因为Flet的“容器”控件Container,每个只能装饰一个控件,为了可以整体装饰所有按钮,我们需要把上面的各个行,放在一个“列”控件Column中,然后Container就可以对这个Column进行装饰了。

这里用到了控件的几个通用属性:color 定义颜色,size定义文字大小,bgcolor定义背景色;特别用到了 expand 属性,每个控件expand 值的比例分配容器内的剩余空间,确保容器里面的子控件,自动适应大小。

import flet as ft

def main(page: ft.Page):

    page.title = "我的计算器" # 定义标题
    page.window_height = 380 # 定义窗口尺寸
    page.window_width  = 450

    # 计算结果存在着“文本”控件中。color定义颜色,size定义文本大小
    result = ft.Text(value="0",color='#ffffff',size=20) 

    page.add(
        ft.Container( 
            bgcolor="#000000", # 容器背景色为黑色
            width= 400, # 容器的宽、高
            height= 300,
            border_radius= ft.border_radius.all(20), # 设置容器为圆角
            padding=20, # 设置容器内边距
            # 容器的内容,一个 Column 控件
            content = ft.Column(controls= [ 
                # Column 控件的子元素,多个 Row
                # 把计算结果单独放在一行中
                ft.Row(controls=[result,]), 
                # 把 AC、+/-、%、/   这4个按钮,放在单独一行中
                ft.Row(controls=[
                        # 多个子控件,设置 expand 属性,每个控件expand 值的比例分配容器内的剩余空间
                        ft.ElevatedButton(text="AC", expand=1),
                        ft.ElevatedButton(text="+/-", expand=1),
                        ft.ElevatedButton(text="%", expand=1),
                        ft.ElevatedButton(text="/", expand=1),
                    ]
                ),
                # 如法炮制,把其他按钮也分组到各自单独的行中,如下:
                ft.Row(
                    controls=[
                        ft.ElevatedButton(text="7", expand=1),
                        ft.ElevatedButton(text="8", expand=1),
                        ft.ElevatedButton(text="9", expand=1),
                        ft.ElevatedButton(text="*", expand=1),
                    ]
                ),
                ft.Row(
                    controls=[
                        ft.ElevatedButton(text="4", expand=1),
                        ft.ElevatedButton(text="5", expand=1),
                        ft.ElevatedButton(text="6", expand=1),
                        ft.ElevatedButton(text="-", expand=1),
                    ]
                ),
                ft.Row(
                    controls=[
                        ft.ElevatedButton(text="1", expand=1),
                        ft.ElevatedButton(text="2", expand=1),
                        ft.ElevatedButton(text="3", expand=1),
                        ft.ElevatedButton(text="+", expand=1),
                    ]
                ),
                ft.Row(
                    controls=[
                        ft.ElevatedButton(text="0", expand=1),
                        ft.ElevatedButton(text=".", expand=1),
                        ft.ElevatedButton(text="=", expand=2), # 等号 = 的expand=2,放大一倍
                    ]
                ),
            ]
        )
    ))

ft.app(target=main)

按vscode的F5键,运行看效果如下:

循序渐进第四步:继续用控件的文本、颜色、背景色等属性,进一步美化。我们把 加减乘除等运算符,背景色设为黄色,把数字设置为暗灰色。

import flet as ft

def main(page: ft.Page):

    page.title = "我的计算器" # 定义标题
    page.window_height = 380 # 定义窗口尺寸
    page.window_width  = 450

    # 计算结果存在着“文本”控件中。color定义颜色,size定义文本大小
    result = ft.Text(value="0",color='#ffffff',size=20) 

    page.add(
        ft.Container( 
            bgcolor="#000000", # 容器背景色为黑色
            width= 400, # 容器的宽、高
            height= 300,
            border_radius= ft.border_radius.all(20), # 设置容器为圆角
            padding=20, # 设置容器内边距
            # 容器的内容,一个 Column 控件
            content = ft.Column(controls= [ 
                # Column 控件的子元素,多个 Row
                # 把计算结果单独放在一行中
                ft.Row(controls=[result,]), 
                # 把 AC、+/-、%、/ 这4个按钮,放在单独一行中
                ft.Row(controls=[
                        # 多个子控件,设置 expand 属性,每个控件expand 值的比例分配容器内的剩余空间
                        ft.ElevatedButton(text="AC", expand=1),
                        ft.ElevatedButton(text="+/-", expand=1),
                        ft.ElevatedButton(text="%", expand=1),
                        ft.ElevatedButton(text="/", expand=1, bgcolor="#ffcc00", color="#ffffff"),
                    ]
                ),
                # 如法炮制,把其他按钮也分组到各自单独的行中,如下:
                ft.Row(
                    controls=[
                        ft.ElevatedButton(text="7", expand=1, bgcolor="#999999", color="#ffffff"),
                        ft.ElevatedButton(text="8", expand=1, bgcolor="#999999", color="#ffffff"),
                        ft.ElevatedButton(text="9", expand=1, bgcolor="#999999", color="#ffffff"),
                        ft.ElevatedButton(text="*", expand=1, bgcolor="#ffcc00", color="#ffffff"),
                    ]
                ),
                ft.Row(
                    controls=[
                        ft.ElevatedButton(text="4", expand=1, bgcolor="#999999", color="#ffffff"),
                        ft.ElevatedButton(text="5", expand=1, bgcolor="#999999", color="#ffffff"),
                        ft.ElevatedButton(text="6", expand=1, bgcolor="#999999", color="#ffffff"),
                        ft.ElevatedButton(text="-", expand=1, bgcolor="#ffcc00", color="#ffffff"),
                    ]
                ),
                ft.Row(
                    controls=[
                        ft.ElevatedButton(text="1", expand=1, bgcolor="#999999", color="#ffffff"),
                        ft.ElevatedButton(text="2", expand=1, bgcolor="#999999", color="#ffffff"),
                        ft.ElevatedButton(text="3", expand=1, bgcolor="#999999", color="#ffffff"),
                        ft.ElevatedButton(text="+", expand=1, bgcolor="#ffcc00", color="#ffffff"),
                    ]
                ),
                ft.Row(
                    controls=[
                        ft.ElevatedButton(text="0", expand=1, bgcolor="#999999", color="#ffffff"),
                        ft.ElevatedButton(text=".", expand=1, bgcolor="#999999", color="#ffffff"),
                        # 等号 = 的 expand=2,放大一倍
                        ft.ElevatedButton(text="=", expand=2, bgcolor="#ffcc00", color="#ffffff"), 
                    ]
                ),
            ]
        )
    ))

ft.app(target=main)

按vscode的F5键,运行看效果如下:

至此,计算器界面就算设计完毕了。还算漂亮吧?

不过有个问题:每个按钮,都在单独设置属性,而且代码重复多;那可否重用呢?当然可以。 下期我们分享如何“UI控件复用”,对“我的计算器”进行改造。

#python# #Flet #计算器# #界面设计#

相关推荐

夸克为啥被称为最污的浏览器

夸克浏览器成为大家欢迎的对象和热点,而很多人都喜欢夸克浏览器,那是因为它用起来十分简单,比Safari还要快好几倍,这也就引起了越来越多人们的关注。可能是使用该功能的用户数量不多,软件方为了节约成本,...

autocad软件(autocad软件下载官网)
autocad软件(autocad软件下载官网)

CAD是计算机辅助设计的简称,属于一种类型软件,全称是ComputerAidedDesign,指利用计算机及其图形设备帮助设计人员进行设计工作。主要应用于机械设计、建筑设计、室内设计、土木工程以及更多领域。市面上有很多种CAD类型软件,...

2025-12-15 14:55 liuian

硬盘数据删除数据恢复(硬盘数据误删了怎么恢复)

如果您的电脑硬盘数据丢失或损坏,以下是一些可能的数据恢复方法:1.使用数据恢复软件:有很多数据恢复软件可以帮助您恢复丢失的数据,例如Recuva、EaseUSDataRecovery、Disk...

flash插件下载手机(flash插件app下载)
flash插件下载手机(flash插件app下载)

可以按照以下的方法步骤解决:1、下载最新版本的AdobeFlashPlayer的APP到你的Android设备上。2、确保你的浏览器支持Flash,并在你的设备上依次度打开设置>安全勾选上“未知的来源”。3、找到问你下载...

2025-12-15 13:55 liuian

gswifi路由器怎么设置(gswifi路由器怎么设置密码)

路由器亮红灯说明这种设备不是路由器,是光猫和路由器合体的PON设备。也就是目前比较普及的光猫。光信号亮红灯有以下几种情况:1、光猫光接口有问题,需要更换光猫。把接头插好即可恢复。2、室内部分光纤弯折过...

微信好友恢复官方网站入口(微信好友恢复平台)
  • 微信好友恢复官方网站入口(微信好友恢复平台)
  • 微信好友恢复官方网站入口(微信好友恢复平台)
  • 微信好友恢复官方网站入口(微信好友恢复平台)
  • 微信好友恢复官方网站入口(微信好友恢复平台)
windows10产品密钥怎么获得(win10产品密钥怎么激活)

1.首先进入到win10专业版系统桌面中,点击开始按钮,然后选择设置选项打开,进入下一步。  2.在打开的Windows设置界面底部点击更新和安全项打开,然后进入下一步。  3.在打开的更新和安全设置...

电脑蓝屏怎么办win7(电脑蓝屏怎么办win7无法启动)

win7开机蓝屏解决步骤:方法,系统自动修复1、蓝屏后重新启动按住F8,进入操作选项,选择“修复计算机”。2、就如系统恢复工具,选择“启动修复”。3、系统自动启动修复程序,一般系统文件丢失等问题可以直...

系统装win几好(window装机系统)

在微软公司推出的Windows操作系统里边儿,使用比较好的就是WindowsXPWindows7操作系统,目前最新的Windows10操作系统和Windows11操作系统也是比较流畅的。另外要...

win10磁盘被加密了怎么解除(w10硬盘加密怎么解除)

如果您的Win10磁盘被BitLocker加密,那么您需要输入BitLocker恢复密钥才能解除锁定。以下是一些步骤可以帮助您解除BitLocker加密: 1.确认您的计算机已连接到互联...

国产数据库排行榜(国产数据库软件都有哪些)

你可以试试北京三维力控的实时数据库产品pSpace6.0,目前这款产品成功的应用于多个行业国产数据库有很多种类,比如著名的华为GaussDB、达梦数据库、金仓数据库等。这些数据库在国内有着广泛的应用...

惠普打印机p1007驱动程序的安装

佳能打印机安装驱动的方法。具体方法如下:1、首先从网上下载好对应操作系统的驱动。2、然后找到下载好的安装包。3、进行解压。4、进入解压文件,点击应用程序的那个文件夹。5、然后点击X64。6、点击set...

2025烟雾头怎么调win7(w7烟雾头2018最新调法)

调整烟雾头盔的方法是打开NVIDIA控制面板,在NVIDIA控制面板中选择调整视频颜色设置,接着点击通过NVIDIA设置选项,然后将亮度调整到79%,对比度调到58%,色调调到12,饱和度调到36%,...

联想官方客服人工(联想客服人工服务)

联系人工服务很方便。联想电脑管家可以通过官方网站或APP页面联系人工服务。联想电脑管家一直致力于提供高质量的客户服务,用户可以在官方网站或APP页面寻找在线客服或拨打联系电话寻求帮助。此外,联想还为...

电脑一天死机七八次(电脑一天死机七八次什么原因)

当处于程序运行不起来的情况时,按住“ctrl+alt+esc”键打开任务管理器。结束卡顿的程序即可或者单击右键,选择属性。点击兼容性,勾选“以兼容性运行程序”。1.先关机并切断电源,拔掉外接设备(如...