Kivy: обновить TextInput после выбора значения из Spinner или Dropdown

Я пытаюсь создать графический интерфейс с помощью kivy, но не могу понять это. Создал всплывающее окно и пытаюсь выбрать значение из раскрывающегося списка и добавить это значение в мой TextInput.

test.py:

    from kivy.app import App
    from kivy.uix.textinput import TextInput
    from kivy.uix.dropdown import DropDown
    from kivy.uix.spinner import Spinner
    from kivy.uix.screenmanager import ScreenManager,Screen
    from kivy.uix.popup import Popup
    from kivy.properties import ObjectProperty
    
    class MyDropDown(DropDown):
        def on_select(self, data):
            print('Selected value:',data)
            #Lets add this data to TextInput ?
            MyTextInput.text = data
            #Lets check is that actual text ?
            print('MyTextInput.text is:',MyTextInput.text)
            #HOW CAN I ADD THIS TEXT TEXTINPUT AFTER THAT?
    
    class MySpinner(Spinner):
        dropdown_cls = ObjectProperty(MyDropDown)
    
    class MyTextInput(TextInput):
        pass
    
    class MyTestPopup(Popup):
        my_popup_spinner = ObjectProperty()
        my_textinput_id = ObjectProperty()
    
    class TestPage(Screen):
        MypagePopup = ObjectProperty()
        def open_my_popup(self, *args):
            #Lets create my popup
            self.MypagePopup = MyTestPopup()
            self.MypagePopup.my_popup_spinner.values = ['Test1','Test2','Test3','Test4','Test']
            self.MypagePopup.open()
    
    class TestPageManager(ScreenManager):
        pass
    
    class test(App):
        def build(self):
           return TestPageManager()
    
    if __name__=='__main__':
        test().run()

test.kv:

<TestPageManager>:
    TestPage:
        name: 'mainpagename'
<MySpinner>:
    text: 'Pick Value'
<MyDropDown>:
    values: ['Test1','Test2','Test3','Test4','Test5']
<MyTextInput>:
<MyTestPopup>:
    my_popup_spinner : my_popup_spinner
    my_textinput_id : my_textinput_id
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'Testing Label Area..'
            pos: self.pos
            size: self.size
        MyTextInput:
            id: my_textinput_id
        MySpinner:
            id: my_popup_spinner
        Button:
            text: 'Done'
            on_release:
                print('MyTextInput id is :',my_textinput_id.text)
<TestPage>:
    Button:
        text: 'Open Popup'
        on_release: root.open_my_popup()

Как видите, я создал подобный графический интерфейс.

Но не могу обновить TextInput после выбора из spinner. Как я могу обновить этот textinput после выбора значения из dropbox. Я не могу понять это. Думаю, я правильно описываю свою проблему. Спасибо, что прочитали и ответили.


person 320V    schedule 23.06.2020    source источник


Ответы (1)


kv = Спиннер:

        on_text:

              my_textinput_id.text = my_popup_spinner.text"

сделал это в моей строке kv для Builder.load_string(kv), и это работает для меня, вы можете попробовать реализовать его в своем примере кода и посмотреть, работает ли он.

установите id.text textinput = на мой счетчик id.text в событии on_text: счетчика Spinner

person Alice    schedule 25.06.2020
comment
Спасибо за ответ дружище. На самом деле я использовал функцию on_text для сброса текста моего Spinner после выбора из раскрывающегося списка. Итак, теперь, если я отредактирую свой файл kivy следующим образом: on_text: MyTextInputid.text = MySpinnerid.text MySpinnerid.text = 'Pick from DropDown', он выйдет из строя и вернет текст моего счетчика и текстового ввода в Pick из DropDown. Это тоже можно как-то исправить? Я не хочу, чтобы текст mytextinput менялся после изменения текста счетчика. - person 320V; 25.06.2020
comment
Хм, я изменил spinnertext таким образом: в классе MySpinner я создал функцию, которая имеет Clock.schedule_once(self.reset_spinners_text). - person 320V; 25.06.2020