부모 스피너에서 선택한 텍스트에 따라 Kivy Spinner의 값을 설정하는 방법을 찾고 있습니다. 문제는 두 스피너를 kv 언어로 정의했기 때문입니다. 접근법이 새로운 값이 처음부터 선택 될 때마다 두 번째 스피너를 파괴 한 다음, 다시 생성 할 것인지 (kv 코드로 인해 그렇게 할 수 없다면) 또는 if 목록을 업데이트하는 on_text 프로 시저를 기반으로 두 번째 스피너의 "값"을 동적으로 업데이트하는 방법이 있습니다.Kivy Spinner 값을 동적으로 변경하기
모든 경우에 아래 코드는 작동하지 않습니다. 어떤 도움을 주셔서 감사합니다. 감사.
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()
고마워요. 그리스트가 스피너에 묶여 있다고 생각했는데, 스피너의 초기 값만을 제공하는 것처럼 보였으므로, 결국 잘못된 오브젝트로 작업하고있었습니다. 도움을 다시 주셔서 감사합니다. –