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

Python使用Kivy开发自拍App在PyCharm运行显示空白界面求助

问题诊断

空白界面是代码不符合Kivy框架规则导致的,具体错误点:

  • Kivy的App类加载UI的固定入口方法是build(),你自定义的方法名为make(),框架启动时找不到UI构建逻辑,自然无法渲染任何组件,直接显示空白窗口
  • 按钮事件绑定错误:obj_button.bind(on_press = self.selfie_take())写法会在程序启动时立刻执行拍照函数,事件绑定需要传入函数引用,不能加调用括号
  • pos_hint参数使用错误:该参数接受0-1区间的相对坐标值,传入35会让按钮直接偏移到窗口可视范围外
  • 相机组件默认未启动预览,初始化时需要设置play=True才会调取摄像头显示画面
  • 导出图片的文件名未加.png后缀,保存的文件无法被常规图片工具识别
  • 默认水平方向的BoxLayout会把相机和按钮横向并排挤压,相机预览区域会被压缩到极小尺寸
修正后完整代码
from kivy.app import App
from kivy.uix.camera import Camera
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button

class Selfie_app(App):
    # 重写App类固定的build方法作为UI入口
    def build(self):
        # 初始化相机时开启预览,设置分辨率
        self.obj_camera = Camera(play=True, resolution=(320, 320))
        # 修正按钮尺寸、位置参数,使用相对坐标
        obj_button = Button(
            text='点击拍照',
            size_hint=(0.6, 0.2),
            pos_hint={'center_x': 0.5}
        )
        # 绑定事件时传入函数对象,不加括号
        obj_button.bind(on_press=self.selfie_take)
        # 设置垂直布局,留出内边距和组件间距
        obj_layout = BoxLayout(orientation='vertical', padding=20, spacing=20)
        obj_layout.add_widget(self.obj_camera)
        obj_layout.add_widget(obj_button)
        return obj_layout

    def selfie_take(self, *args):
        print('自拍拍摄成功')
        # 导出图片添加png后缀
        self.obj_camera.export_to_png('my_selfie.png')

if __name__ == '__main__':
    Selfie_app().run()
运行提示
  • 首次运行需要允许程序访问摄像头权限,否则相机预览会显示为黑色
  • 如果需要调整组件位置,pos_hint所有坐标值都要控制在0-1区间,对应父布局的相对位置

内容的提问来源于stack exchange,提问作者Gireesh N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:20:03