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

Python+Flet 实现简单的“扫码功能”,举一反三即可更实用

itomcoil 2025-04-27 14:17 15 浏览

应网友和粉丝留言要求,特用 Python + Flet 实现一个常用的简单扫码功能。Flet当前才0.24.0 版本,还没有内置的扫码控件模块,但是可以结合第三方模块 pyzbar 来实现这个功能。Python之所以强大有生命力,很大程度上在于有“无数个”第三方模块可以直接调用。

首先,要安装一下第三方模块。为了提高按照效率,建议从国内镜像源进行安置,要用到 参数 -i 国内url

pip install pyzbar opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple


关键代码 -i
https://pypi.tuna.tsinghua.edu.cn/simple
表示从 清华大学的镜像站 下载安装 pyzbar 和 opencv-python 两个模块。

其次,用VScode建立Py文档,引入数据包。

import time
import cv2
import flet as ft
from threading import Thread
from pyzbar.pyzbar import decode

关键代码 import cv2 from pyzbar.pyzbar import decode

再次,编写一个扫码类 Scanner。编写类是 python 基本编程技术,为了防止UI卡顿,要用到python的多线程。相关代码含义,可以结合注释看,都挺简单的 —— 人生苦短,我用python

class Scanner:
    def __init__(self):
        self.cap = cv2.VideoCapture(0)
        self.last_code = None
        self.running = True

    def scan(self):
        while self.running:
            ret, frame = self.cap.read() # 用cv2读取摄像头帧
            if not ret:
                break
            codes = decode(frame) # 解码模块
            for code in codes:
                if code.data.decode('utf-8') != self.last_code:
                    self.last_code = code.data.decode('utf-8')
                    print(f"Scanned: {self.last_code}")
            time.sleep(0.5)  # 减少CPU占用率

    def start(self):
        # 启动线程,开始扫码(看到摄像头亮,就成功了的)
        Thread(target=self.scan).start()

    def stop(self):
        self.running = False # 停止标志
        self.cap.release() # 释放资源

最后,编写 Flet 的主函数,调用Scanner类。这里要用到 Flet 的 警告对话框控件 AlertDialog,所有的控件使用,和前面分享的 文本控件、按钮控件 等等 都差不多,无非就是 显示的文本、绑定点击事件,等等,相信你一看就秒懂。还是那句话,Flet 主导一个简单、通吃,不然为啥要学 Flet 呢?主函数 也很简单,结合注释看即可啦。

def main(page: ft.Page):
    scanner = Scanner() # 实例化 Scanner 类
    scanner.start() # 开机便启动摄像头扫码

    def on_stop(e): # 处理点击事件的响应函数
        scanner.stop() # 停止扫码
        page.dialog.open = False # 关闭对话框
        page.update() # 跟新页面UI

    # 定义一个 Flet 对话框控件
    dialog = ft.AlertDialog(
        title=ft.Text("Scanner"),
        actions=[
            ft.TextButton("Stop", on_click=on_stop),
        ],
        on_dismiss=lambda e: on_stop(None)
    )

    # 启动即显示对话框控件
    page.dialog = dialog
    dialog.open = True
    page.update()

# 启动/运行程序
ft.app(target=main)

按vscode的F5运行如下:

您可以试试添加一个功能:停止后,再次启动摄像头扫码。挑战一下哦。

#python# #Flet #扫码# #cv#

相关推荐

Python 类型注解的进阶应用:从静态检查到元编程

阅读文章前辛苦您点下“关注”,方便讨论和分享,为了回馈您的支持,我将每日更新优质内容。如需转载请附上本文源链接!近年来,Python类型注解(TypeHinting)逐渐从一个可选的功能演变为大型...

高阶Python|返回类型提示技巧 (1)

引言Python提供了一种可选的特性——类型提示,它有助于提高代码的可读性、可推理性和可调试性。通过类型提示,开发者能够清楚地了解变量、函数参数和返回值应具备的数据类型。在开发那些需要高度灵活性的应用...

跟我一起学Python-函数的定义(基础)

一.函数的定义和调用1.语法:def函数名():函数封装的代码函数最好能够表达函数内部封装的代码功能,方便后续的调用,函数命名需要遵循规则字母、数字、下划线、不能以数字开头,不能使用系统关键字。&#...

Python函数参数和返回值类型:让你的代码更清晰、更健壮

在Python开发中,你是否遇到过这些抓狂时刻?同事写的函数参数类型全靠猜调试两小时发现传了字符串给数值计算函数重构代码时不知道函数返回的是列表还是字典今天教你两招,彻底解决类型混乱问题!让你的...

python入门到脱坑 函数—参数(python 参数处理)

本文包括必须参数,关键参数,默认参数以及可变参数Python函数参数详解一、位置参数(必需参数)位置参数是函数调用时必须提供的参数,且顺序必须与定义时一致。基本用法defgreet(name,me...

python入门到脱坑经典案例—求两个数的和

下面为大家讲解如何求两个数之和——这是编程中最基础但最重要的算术运算之一。我们会从最简单的情况逐步深入,并穿插相关编程概念。1.最基础版本#定义两个变量num1=5num2=3#...

新手必看!30 个 Python 核心函数详解,手把手教你玩转编程

Python中30个核心函数及其含义、代码示例、注释和应用场景:print():用于输出文本或变量的值到控制台。message="Hello,World!"#定义一个...

Python快速入门教程1:基本语法、数据类型、运算符、数字字符串

Python3的基础教程,涵盖了基本语法、数据类型、类型转换、解释器、注释、运算符、数字和字符串等内容,并附有使用实例场景。Python3的基础教程,涵盖了基本语法、数据类型、类型转换、解释器、注释、...

编程小白学做题:Python 的经典编程题及详解,附代码和注释(八)

适合Python3+的6道编程练习题(附详解)1找出字典中值最小的键题目描述:找出字典中值最小的键(如{"a":5,"b":2,"c...

新手学Python避坑,学习效率狂飙! 二十一、print()函数

感谢大家对《新手学Python避坑,学习效率狂飙!》系列的点赞、关注和收藏,今天这编是这个系列的第二十一个分享,前面还有二十个,大家可以关注下之前发布的文章。下面是我们今天第三个的分享:在Pytho...

编程小白学做题:Python 的经典编程题及详解,附代码和注释(六)

适合Python3+的6道编程练习题(附详解)1、打印杨辉三角的前n行题目描述:给定正整数n,打印杨辉三角的前n行(每个数等于它上方两数之和,每行首尾为1)。编写思路:杨辉三角的第i...

让你的Python代码更易读:7个提升函数可读性的实用技巧

如果你正在阅读这篇文章,很可能你已经用Python编程有一段时间了。今天,让我们聊聊可以提升你编程水平的一件事:编写易读的函数。请想一想:我们花在阅读代码上的时间大约是写代码的10倍。所以,每当你创建...

python入门到脱坑 函数—return语句

Python函数中的return语句详解一、return语句基础1.1基本功能return语句用于从函数中返回一个值,并立即结束函数的执行。defadd(a,b):returna+...

编程小白学做题:Python 的经典编程题及详解,附代码和注释(七)

适合Python3+的6道编程练习题(附详解)1.检查字符串是否以指定子串开头题目描述:判断字符串是否以给定子串开头(如"helloworld"以"hello&...

python的注释符是什么(python的合法注释符号是什么)

python的注释符是什么?python的注释符包括单行注释符和多行注释符。一、python单行注释符号(#)井号(#)常被用作单行注释符号,在代码中使用#时,它右边的任何数据都会被忽略,当做是注释。...