#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. Я не могу воспроизвести это поведение.