Я пытаюсь установить текстуру виджета Image, который находится внутри класса Wrapper. Обертка также устанавливается внутри класса OneCamScreen. OneCamScreen также управляет классом ScreenManager, который является root классом для моего приложения. Внутри моей основной программы l oop есть конструкция, которая позволяет отображать видео с камеры. Он работает, создавая переменную текстуры, которая переходит в свойство Image.texture. Я использовал эту конструкцию, чтобы поместить текстурную переменную в свойство Image.texture:
cam1 = ObjectProperty(None)
...
App.get_running_app().root.cam1.texture = texture
Поскольку я сделал несколько экранов, класс-оболочка перестал быть root, не более. Я попытался сделать эту переменную глобальной, вызывая эту переменную из другого класса, и все это не работает. Кажется, что я могу только вызвать root, self, app, но я не могу вызвать подкласс и получить переменную из него. Что мне делать?
Мой python код:
...
class MainScreen(Screen):
pass
class OneCamScreen(Screen):
pass
class TwoCamScreen(Screen):
pass
class ScreenManager(ScreenManager):
main = ObjectProperty(None)
onecam = ObjectProperty(None)
twocam = ObjectProperty(None)
class Wrapper(BoxLayout):
cam1 = ObjectProperty(None)
class CamMain(App):
def build(self):
self.capture = cv2.VideoCapture(0)
return ScreenManager()
def update(self, dt):
_, frame = self.capture.read()
texture = Texture.create(size=(frame.shape[1], frame.shape[0]), colorfmt='bgr')
result = cv2.flip(frame, 0)
texture.blit_buffer(result.tostring(), colorfmt='bgr', bufferfmt='ubyte')
App.get_running_app().cam1.texture = texture
if __name__ == "__main__":
CamMain().run()
И мой код .kv:
<ScreenManager>:
id: manager
transition: FadeTransition()
main: main
onecam: onecam
twocam: twocam
MainScreen:
id: main
name: 'main'
manager:manager
OneCamScreen:
id: onecam
name: 'onecam'
manager:manager
TwoCamScreen:
id: twocam
name: 'twocam'
manager:manager
<MainScreen>:
BoxLayout:
Button:
on_release: app.root.current ='onecam'
text:'1 камера'
Button:
on_release: app.root.current ='twocam'
text:'2 камера'
<OneCamScreen>:
Wrapper
<TwoCamScreen>:
Label:
text:'второй экран'
<Wrapper>:
hue: hue
saturation: saturation
value:value
cam1: cam1
orientation: 'vertical'
GridLayout:
cols:2
BoxLayout:
orientation: 'vertical'
spacing:20
padding:25
Image:
id:cam1
size: self.texture_size
...
Спасибо за внимание!