python - Kivy 的最后一个相机帧仍然在屏幕上
问题描述
我写了一些启动和停止相机的代码。
当用户按下“停止相机”按钮时,视频成功停止。问题是最后一个视频帧保留在屏幕上。
用户停止相机后如何获得干净的背景?
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
Builder.load_string("""
<CameraScreen>:
GridLayout:
id: grid1
cols: 1
Camera:
id: camera
resolution: (640, 480)
play: False
ToggleButton:
id: camera_button
text: 'Start Camera'
on_press: root.play()
<RootWidget>:
canvas.before:
Color:
rgba: 1, 1, 1, 1
Rectangle:
pos: self.pos
size: self.size
CameraScreen:
id: camera_screen
name: "camera_screen"
""")
class CameraScreen(Screen):
def play(self):
if self.ids.camera.play == False:
self.ids.camera.play = True
self.ids.camera_button.text = "Stop Camera"
else:
self.ids.camera.play = False
self.ids.camera_button.text = "Start Camera"
class RootWidget(ScreenManager):
pass
class MainApp(App):
def build(self):
return RootWidget()
MainApp().run()
解决方案
是的Camera
扩展Image
,因此您可以更改texture
的Camera
。尝试这样的事情:
def play(self):
if self.ids.camera.play == False:
self.ids.camera.texture = self.ids.camera._camera.texture
self.ids.camera.play = True
self.ids.camera_button.text = "Stop Camera"
else:
self.ids.camera.play = False
self.ids.camera.texture = None
self.ids.camera_button.text = "Start Camera"
推荐阅读
- php - 如何在 PHP 中根据对象键合并数组对象
- kubernetes - 在 Kubernetes 集群中运行 E2E 测试
- vue.js - 在 vue-router 中静默更新 url 而不会触发路由
- javascript - 按字母顺序排序
- linq - 具有子属性的复杂 linq 查询
- reactjs - 反应电话号码输入格式和无格式输出
- linux - 如何为 Alpine Linux 中的进程提供`__snprintf_chk`
- jsf - 提醒保存更改
- python - DBLP从python中的巨大xml文件中获取www-homepage信息
- angular - 角度中没有这样的文件cli.js