sl7
sl7

Reputation: 13

Apps in Kivy: get values in kv file

I am new to programming with Kivy, I'm trying to develop a program that collects the number of people in a room.

And my difficulty is to pass values between KV file and the main. I need to get the value of the slider which is in KV file and use it in main.py program

How could it? already I tried several ways that were posted on different topics here on the site but could not. Perhaps because as I have no knowledge in the area did not know apply it right.

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import NumericProperty, ObjectProperty
from kivy.lang import Builder

class ThemeBackground(Screen):
    pass

class myApp(App):

    def build(self):
        root = ScreenManager()
        root.add_widget(ThemeBackground(name='Screen'))
        return root

if __name__ == '__main__':
    myApp().run()

And Kv file

#:import random random.random

<ThemeBackground>:
    orientation: 'vertical'
    canvas:
        Color:
            rgb: 1, 1, 1
        Rectangle:
            source: 'data/images/background.jpg'
            size: self.size

    BoxLayout:
        padding: 10
        spacing: 10
        size_hint: 1, None
        pos_hint: {'top': 1}
        height: 44
        Image:
            size_hint: None, None
            size: 24, 24
            source: 'data/logo/kivy-icon-24.png'
        Label:
            height: 24
            text_size: self.size
            color: (1, 1, 1, .8)
            text: 'Kivy 1.9.0.'
            valign: 'middle'

    GridLayout:
        cols: 2
        Label:
            text: 'Please enter \nthe number of occupants?'
            bold: True
            font_name: 'data/fonts/DejaVuSans.ttf'
            font_size: 22
            halign: 'center'

        Slider:
            id: slider
            min: 0.0
            max: 15.0
            value: 1.0
            step: 1.0
            orientation: "horizontal"
            width: "38dp"

        Label
            text: ''

        Label
            text: '{}'.format(slider.value)
            halign: 'center'
            valign: 'top'
            bold: True
            text_size: self.size
            font_size: 18

    Button:
        text: 'Enter'
        size_hint_y: None
        height: '50sp'}

Upvotes: 0

Views: 1894

Answers (1)

Assem
Assem

Reputation: 12097

You should load the kv file in the build of your myApp:

class myApp(App):
    def build(self):
        self.load_kv("main.kv")
        return ThemeBackground()

You have unneeded } in the bottom of kv file,the last character, remove it.

     height: '50sp'}

Preview: enter image description here


In order to access the values of the slider, add a variable myslider to both of python and kv files like this:

kv:

<ThemeBackground>:
    orientation: 'vertical'
    myslider: slider

python:

class ThemeBackground(Screen):
    myslider = ObjectProperty(None)

Now you can access the value , min or max by:

class myApp(App):
    def build(self):
        self.load_kv("kivy.3.kv")
        tb = ThemeBackground() 
        print "value =",tb.myslider.value # <---- value here
        print "min =",tb.myslider.min # <--- min here
        return tb

Upvotes: 1

Related Questions