【问题标题】:Changing Kivy Slider Value from another screen从另一个屏幕更改 Kivy 滑块值
【发布时间】:2018-10-04 06:39:31
【问题描述】:

我正在尝试将滑块的值重置为 3。我有两个滑块的值是 1 - 5,步长为 1。

我最初将值设置为 3。我希望能够使用我的滑块,转到主屏幕,然后将它们设置回 3。重置后滑块需要可重复使用,这是当前我遇到的问题。

每次我点击重置按钮时,滑块都会回到 3,但无法再次移动......有没有人有任何见解?

简单代码示例:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.slider import Slider

Builder.load_string('''

<HomeScreen>:
    BoxLayout:
        orientation: "vertical"
        Button:
            text: "Next Screen"
            on_release:
                app.root.current = "screen1"
        Button:
            text: "If I press this, it will turn the values back to 3"
            on_release:
                app.root.get_screen("screen1").slider1.value = 3
                app.root.get_screen("screen2").slider2.value = 3

<Screen1>:
    BoxLayout:
        orientation: "vertical"
        Label:
            text: str(slider1.value)
        Slider:
            id: slider1
            max: 5
            min: 1
            value: 3
            step: 1

        Button:
            text: "Next Screen"
            on_release:
                app.root.current = "screen2"
<Screen2>:
    BoxLayout:
        orientation: "vertical"
        Label:
            text: str(slider2.value)
        Slider:
            id: slider2
            max: 5
            min: 1
            value: 3
            step: 1
        Button:
            text: "Back to Home Screen"
            on_release:
                app.root.current = "homescreen"

<SM>:
    name: "sm"
    id: sm
    HomeScreen:
        name: "homescreen"
        id: hs
    Screen1:
        name: "screen1"
        id: s1
    Screen2:
        name: "screen2"
        id: s2

''')

class HomeScreen(Screen):
    pass

class Screen1(Screen):
    slider1 = Slider

class Screen2(Screen):
    slider2 = Slider

class SM(ScreenManager):
    pass

class MyApp(App):
    def build(self):
        global sm
        sm = SM()
        return sm

if __name__ == "__main__":
    MyApp().run()

【问题讨论】:

    标签: slider kivy


    【解决方案1】:

    首先,你不需要这些作业

    class Screen1(Screen):
        slider1 = Slider
    
    class Screen2(Screen):
        slider2 = Slider
    

    因为您将新滑块分配给滑块变量。

    要访问滑块值,您必须使用这样的 id:

    Button:
        text: "If I press this, it will turn the values back to 3"
        on_release:
            app.root.get_screen("screen1").ids.slider1.value = 3
            app.root.get_screen("screen2").ids.slider2.value = 3
    

    就是这样……

    【讨论】:

    • 你好胚胎,谢谢你的回复。这绝对解决了我的问题!我没想过要使用.ids。我接受了您的回答,但在获得足够的代表之前无法投票,对不起。保重,再次感谢!
    猜你喜欢
    • 2015-06-07
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多