【发布时间】:2019-02-06 10:57:09
【问题描述】:
我想在 Python 中使用 Kivy 构建一个应用程序,但我遇到了一些错误,我试图解决很多次但我无法解决。
我想先打开一个相机屏幕。在屏幕中,我们将看到我们的网络摄像头屏幕,底部有 2 个按钮(播放和捕获)。当我按下播放时,网络摄像头将打开,如果我按下捕获按钮,我想拍摄快照。我构建了工作代码,直到这里。
按下 Capture 按钮并拍摄快照后,我想切换屏幕以进入第二个屏幕,它只会在黑色背景中显示一个基本的 Hello World 语句。
这是我的代码,我的错在哪里?你能解决它吗?
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
import time
class CheckScreen(Screen):
pass
class ScreenManagement(ScreenManager):
pass
Builder.load_string("""
ScreenManagement:
CheckScreen:
<CameraClick@ScreenManager>:
orientation: 'vertical'
Camera:
id: camera
resolution: (640, 480)
play: False
ToggleButton:
text: 'Play'
on_press: camera.play = not camera.play
size_hint_y: None
height: '48dp'
Button:
text: 'Capture'
size_hint_y: None
height: '48dp'
on_press:
root.capture()
root.manager.transition.direction = 'left'
root.manager.current = 'check'
<CheckScreen>:
name: "check"
Button:
text: "Next Screen"
font_size: 50
""")
class CameraClick(BoxLayout):
def capture(self):
camera = self.ids['camera']
timestr = time.strftime("%Y%m%d_%H%M%S")
camera.export_to_png("IMG_{}.png".format(timestr))
print("Captured")
return CheckScreen
class TestCamera(App):
def build(self):
return CameraClick()
TestCamera().run()
当我运行这段代码时,它会显示;
AttributeError: 'CameraClick' 对象没有属性 'manager'
【问题讨论】:
-
不确定这是否是问题所在,但您的
CameraClick类在您的kv代码中定义为扩展ScreenManager,但在您的py代码中CameraClick类定义为扩展BoxLayout。您的py代码可能优先,因此CameraClick不会扩展ScreenManager,因此没有manager属性。