Kivy 中的应用程序:获取 kv 文件中的值
Apps in Kivy: get values in kv file
我是 Kivy 编程的新手,我正在尝试开发一个程序来收集房间内的人数。
而我的难点是在KV文件和main之间传递值。我需要获取 KV 文件中滑块的值并在 main.py 程序
中使用它
怎么可能?我已经尝试了几种在网站上不同主题上发布的方法,但没有成功。也许是因为我对该领域一无所知,不知道如何正确应用它。
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()
和Kv文件
#: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'}
您应该在 myApp
的 build
中加载 kv
文件:
class myApp(App):
def build(self):
self.load_kv("main.kv")
return ThemeBackground()
你在 kv
文件的底部有不需要的 }
,最后一个字符,删除它。
height: '50sp'}
预览:
为了访问滑块的值,将变量 myslider
添加到 python 和 kv 文件,如下所示:
kv:
<ThemeBackground>:
orientation: 'vertical'
myslider: slider
python:
class ThemeBackground(Screen):
myslider = ObjectProperty(None)
现在您可以通过以下方式访问值、最小值或最大值:
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
我是 Kivy 编程的新手,我正在尝试开发一个程序来收集房间内的人数。
而我的难点是在KV文件和main之间传递值。我需要获取 KV 文件中滑块的值并在 main.py 程序
中使用它怎么可能?我已经尝试了几种在网站上不同主题上发布的方法,但没有成功。也许是因为我对该领域一无所知,不知道如何正确应用它。
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()
和Kv文件
#: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'}
您应该在 myApp
的 build
中加载 kv
文件:
class myApp(App):
def build(self):
self.load_kv("main.kv")
return ThemeBackground()
你在 kv
文件的底部有不需要的 }
,最后一个字符,删除它。
height: '50sp'}
预览:
为了访问滑块的值,将变量 myslider
添加到 python 和 kv 文件,如下所示:
kv:
<ThemeBackground>:
orientation: 'vertical'
myslider: slider
python:
class ThemeBackground(Screen):
myslider = ObjectProperty(None)
现在您可以通过以下方式访问值、最小值或最大值:
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