You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Kivy开发移动端应用全屏竖版相机组件并实现点击拍照停止功能

KivyMD相机功能问题修复

你现有代码存在4个核心问题,直接修改即可实现需求:

  • KV布局结构错误,MDBoxLayout声明行数为2但只添加了1个Camera组件,Rotate旋转指令未放在正确的画布节点下,相机尺寸绑定失效无法实现全屏
  • 拍照按钮创建后未添加到布局中,点击事件完全无法触发
  • 相机竖屏适配逻辑不全,仅设置旋转角度无法解决画面拉伸、比例错误问题
  • 拍照逻辑时序有问题,停止预览后立即导出图片可能拿到空白帧

修复后完整可运行代码

# 修复后的KV布局
camera_widget = '''
MDBoxLayout:
    orientation: 'vertical'
    Camera:
        id: camera
        play: True
        size_hint: 1, 1
        resolution: (1080, 1920) # 竖屏分辨率优先选高>宽的参数,适配移动端
        canvas.before:
            PushMatrix
            Rotate:
                origin: self.center
                angle: -90
        canvas.after:
            PopMatrix
'''

def menue_arabic_camera(self,*args):
    self.screen.clear_widgets()
    return_back = MDFlatButton(text=self.ar_text("العودة للخلف"),
                                 pos_hint={'center_x': .5, 'center_y': .02},
                                 on_press=self.selection_load_cam_ar,
                                 font_name='DROIDKUFI-REGULAR.TTF')
    self.screen.add_widget(return_back)
    self.SHEET = Builder.load_string(camera_widget)
    self.screen.add_widget(self.SHEET)
    # 修复:将拍照按钮添加到布局中
    CAPTURE = MDFlatButton(text="Capture",
                                 pos_hint={'center_x': .5, 'center_y': .05},
                                 on_press=self.capture)
    self.screen.add_widget(CAPTURE)

def capture(self,*args):
    camera = self.SHEET.ids['camera']
    # 先导出图片再停止预览,避免出现空白图
    name = "User_sheet"
    camera.export_to_png("IMG_{}.png".format(name))
    self.save_img()
    camera.play = False

修改说明

  • 去掉了MDBoxLayout的rows参数,改为垂直排列,相机设置size_hint为1:1占满父布局实现全屏
  • 旋转指令移到canvas.before节点,搭配PushMatrix和PopMatrix避免影响其他组件渲染
  • 相机分辨率调整为高大于宽的竖屏参数,适配移动端竖屏显示需求
  • 补全了拍照按钮的add_widget逻辑,保证按钮正常显示可点击
  • 调整拍照时序,先导出图片再停止预览,避免帧未渲染就停止采集导致的空白图片问题
  • 相机默认开启play属性,避免部分设备启动后相机不加载画面的问题

内容的提问来源于stack exchange,提问作者Twfyq Bhyry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:54:03