如何获取Kivy中Screen组件内Slider的值?报错AttributeError
解决Kivy中访问Slider值出现AttributeError的问题
这个错误的原因很明确:你尝试从self.root(也就是ScreenManagement实例)的ids里获取slider1,但slider1的id是定义在Maintenance这个Screen内部的,ScreenManagement的ids里并没有这个控件——它只包含直接属于它的子控件(也就是各个Screen实例)。
下面给你几种可行的修复方法:
方法1:通过ScreenManager获取对应Screen实例后访问ids
修改main.py里的my_value方法,先获取名为screen1的Maintenance实例,再访问它内部的slider1:
def my_value(self): # 获取Maintenance屏幕实例 maintenance_screen = self.root.get_screen('screen1') # 访问该屏幕内的Slider值 print(maintenance_screen.ids.slider1.value)
方法2:直接在kv文件中传递Slider的值给方法
这种方式更简洁,不需要手动查找控件,直接把Slider的当前值作为参数传给my_value:
首先修改ex4.kv中的Slider部分:
Slider: id: slider1 on_value: app.my_value(self.value)
然后修改main.py里的my_value方法,接收这个参数:
def my_value(self, slider_value): print(slider_value)
方法3:给Screen类添加获取值的方法
你可以在Maintenance类里封装一个获取Slider值的方法,这样代码结构更清晰:
修改main.py中的Maintenance类:
class Maintenance(Screen): def get_slider_value(self): return self.ids.slider1.value
然后在my_value里调用这个方法:
def my_value(self): maintenance_screen = self.root.get_screen('screen1') print(maintenance_screen.get_slider_value())
这三种方法都能解决你的问题,其中方法2是最直接的Kivy式写法,推荐优先使用。
内容的提问来源于stack exchange,提问作者Nandakishor Jahagirdar
相关产品推荐
相关产品推荐

