繁体   English   中英

如何从.kv文件中获取slider值到kivy中的python文件

[英]How to get slider value from .kv file to python file in kivy

我不确定如何将 slider 值从 a.kv 文件获取到 python 文件。

我的.kv 文件是:

<MyGrid>
    slider: slider
    Slider:
      id: slider2
      min: 0
      max: 23
      step: 1
      orientation: 'horizontal'
      pos: 530,400
    Button:
      text:"Start"
      on_press: root.btn()
      pos: 350,120

我的 python 文件是:

import kivy
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.slider import Slider
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.config import Config
from kivy.properties import ObjectProperty
from kivy.app import App
from kivy.uix.checkbox import CheckBox
from kivy.lang import Builder
Config.set('input', 'mouse', 'mouse,multitouch_on_demand')



class MyGrid(Widget):
    slider = ObjectProperty(None)
    def btn(self):
        print(self.slider.text)
       


class MyApp(App):
    def build(self):
        return MyGrid()



if __name__ == '__main__':
    x = MyApp().run()
  

我究竟做错了什么? 我收到一条错误消息:

AttributeError:“滑块”object 没有属性“文本”

您的idbtn function主布局不正确。所以我全部修复了。您可以获得滑块的值,而不是文本。 主布局需要使用 boxlayout、floatlayout、gridlayout 等。 小部件不是布局。 所以你的小部件(如按钮和其他)消失了。 检查下面的代码。

from kivy.config import Config
from kivy.properties import ObjectProperty
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
kv = Builder.load_string("""
<MyGrid>
    slider: slider
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: str(slider.value)
        Slider:
            id: slider
            min: 0
            max: 23
            orientation: 'horizontal'
        Button:
            text: "Print Value"
            on_press: root.btn()
""")
Config.set('input', 'mouse', 'mouse,multitouch_on_demand')
class MyGrid(BoxLayout):
    slider = ObjectProperty()
    def btn(self):
        print(self.slider.value)
class MyApp(App):
    def build(self):
        return MyGrid()
if __name__ == '__main__':
    MyApp().run()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM