Kivy spinner on_text_changed событие

#kivy #spinner

#kivy #счетчик

Вопрос:

Я хотел бы реагировать на событие, когда spinner изменяется значение, и фиксировать это значение. Вот минимальный воспроизводимый пример:

 import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.spinner import Spinner

class MyApp(App):
    def build(self):

        mainbox = BoxLayout(orientation="horizontal",
                            spacing=15,
                            padding=5)
        self.spinner_languages = Spinner(text ="", 
                values =("Python", "Java", "C  ", "C", "C#", "PHP"), 
                size_hint = (0.3, 0.2)
                # on_text_changed = self.spinner_text_changed
                )
        mainbox.add_widget(self.spinner_languages)

        return mainbox

    #def spinner_text_changed(self, text):
    #    self.language = text
    #    print(self.language)

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

Закомментированные строки — это то, что я хотел бы исправить.

Ответ №1:

Вам просто нужно использовать bind для запуска spinner_text_changed() метода при изменении text свойства, например:

 from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.spinner import Spinner

class MyApp(App):
    def build(self):

        mainbox = BoxLayout(orientation="horizontal",
                            spacing=15,
                            padding=5)
        self.spinner_languages = Spinner(text ="",
                values =("Python", "Java", "C  ", "C", "C#", "PHP"),
                size_hint = (0.3, 0.2)
                )
        self.spinner_languages.bind(text=self.spinner_text_changed)
        mainbox.add_widget(self.spinner_languages)

        return mainbox

    def spinner_text_changed(self, spinner, text):
       self.language = text
       print(self.language)

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

Комментарии:

1. Я считаю, что это работает, но есть ли какой-то трюк, как добиться выбора языка (например, Python) с помощью мыши на рабочем столе? Я считаю, что это работает при нажатии на мобильный телефон, но на экране компьютера я не могу добиться другого выбора, кроме значения по умолчанию.

2. Просто нажмите на Spinner , и выбор должен отображаться.

3. Когда я щелкаю мышью по выбору счетчика, отображается, но я не могу выбрать какой-либо выбор. Он очень быстро разрушится.

4. Я не могу воспроизвести это поведение.