【问题标题】:Changing Kivy Spinner values dynamically动态更改 Kivy Spinner 值
【发布时间】:2017-01-28 08:18:02
【问题描述】:

我正在寻找一种方法来设置 Kivy Spinner 的值,具体取决于从父微调器中选择的文本。问题是我已经用 kv 语言定义了两个微调器。我不确定该方法是否会在每次从第一个中选择一个新值时销毁第二个微调器,然后重新生成它(如果是这样,由于 kv 代码,我不知道该怎么做),或者如果有一种方法可以根据更新列表的 on_text 过程动态更新第二个微调器的“值”。

在所有情况下,下面的代码都不起作用。任何帮助表示赞赏。谢谢。

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.spinner import Spinner

Builder.load_string('''
<MainScreen>:
    AnchorLayout:
        anchor_x: 'center'
        anchor_y: 'top'
        BoxLayout:
            size_hint: 1, .9
            orientation: 'vertical'
            padding: 80
            spacing: 20
            Spinner:
                id: spinner_1
                text: '< Select >'
                values: root.pickType
                on_text: root.updateSubSpinner(spinner_1.text)
            Spinner:
                id: spinner_2
                text: '< Select >'
                values: root.pickSubType

    AnchorLayout:
        anchor_x: 'center'
        anchor_y: 'bottom'
        size_hint: 1, .1
        Button:
            on_press: root.onExit()
            text: 'Exit'
            font_size: 50

''')

class MainScreen(FloatLayout):
    def __init__(self, **kwargs):
        self.buildLists()
        super(MainScreen, self).__init__(**kwargs)

    def buildLists(self):
        self.pickType = ['Select','#1','#2','#3']
        self.pickSubType = ['Select'] 

    def updateSubSpinner(self,text):
        if text == '#1':
            self.pickSubType.extend('A'+'B')
        elif text == '#2':
            self.pickSubType.extend('P'+'Q')
        else:
            self.pickSubType.extend('Y'+'Z')

    def onExit(self):
        App.get_running_app().stop()

class TestApp(App):
    def build(self):
        return MainScreen()

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

【问题讨论】:

    标签: spinner kivy kivy-language


    【解决方案1】:

    您应该引用子微调器值列表,而不是 pickSubType 列表,它甚至没有绑定到它。示例:

    def updateSubSpinner(self, text):
        self.ids.spinner_2.text = 'Select'
    
        if text == '#1':
            self.ids.spinner_2.values = ['A', 'B']
        elif text == '#2':
            self.ids.spinner_2.values = ['P', 'Q']
        else:
            self.ids.spinner_2.values = ['Y', 'Z']
    

    写入values: root.pickSubType 不会将pickSubType 绑定到values,如果第一个不是ListProperty。如果您愿意,可以将其升级为ListProperty,但这不是必需的。

    【讨论】:

    • 非常感谢。我认为列表绑定到微调器,尽管它显然似乎只为微调器提供其初始值,所以我最终处理了错误的对象。再次感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多