Skip to content
Advertisement

Full screen kivy camera with buttons on top of the picture

enter image description hereHow can I make a full screen camera with buttons on top of the image.

resolution: (self.width, self.height)

It doesn’t help, the camera still comes out with frames. Didn’t find anything about this in the official documentation.

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
import time
Builder.load_string('''
<CameraClick>:
    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()
''')


class CameraClick(BoxLayout):
    def capture(self):
        '''
        Function to capture the images and give them the names
        according to their captured time and date.
        '''
        camera = self.ids['camera']
        timestr = time.strftime("%Y%m%d_%H%M%S")
        camera.export_to_png("IMG_{}.png".format(timestr))
        print("Captured")


class TestCamera(App):

    def build(self):
        return CameraClick()


TestCamera().run()

Advertisement

Answer

Some minor changes to your code (component reorder, added Window.maximize() do what I think you’re looking for (edit: modified to make the camera as large as possible while still maintaining aspect ratio)

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
import time

Window.maximize()

Builder.load_string(
    '''
<CameraClick>:
    orientation: 'vertical'
    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()
    Camera:
        id: camera
        resolution: (640, 480)
        allow_stretch: True
        keep_ratio: True
        play: False
'''
)


class CameraClick(BoxLayout):
    def capture(self):
        '''
        Function to capture the images and give them the names
        according to their captured time and date.
        '''
        camera = self.ids['camera']
        timestr = time.strftime("%Y%m%d_%H%M%S")
        camera.export_to_png("IMG_{}.png".format(timestr))
        print("Captured")


class TestCamera(App):

    def build(self):
        return CameraClick()


TestCamera().run()
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement