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
相关产品推荐
相关产品推荐

