Я хочу, чтобы раскрывающийся список оставался видимым после того, как был сделан выбор (вместо исчезновения). Я попробовал несколько синтаксисов с BooleanProperty увольнять_поиск, но не могу понять, как это понять. Я новичок в Python и Kivy. Где и как я могу установить это свойство? Благодаряkivy dropdown автоматически отклоняется
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.factory import Factory
from kivy.properties import ListProperty, ObjectProperty
from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
class MultiSelectSpinner(Button):
dropdown = ObjectProperty(None)
values = ListProperty([])
"""Values to choose from."""
selected_values = ListProperty([])
"""List of values selected by the user."""
def __init__(self, **kwargs):
self.bind(dropdown=self.update_dropdown)
self.bind(values=self.update_dropdown)
super(MultiSelectSpinner, self).__init__(**kwargs)
self.bind(on_release=self.toggle_dropdown)
def toggle_dropdown(self, *args):
if self.dropdown.parent:
self.dropdown.dismiss()
else:
self.dropdown.open(self)
def update_dropdown(self, *args):
if not self.dropdown:
self.dropdown = DropDown()
values = self.values
if values:
if self.dropdown.children:
self.dropdown.clear_widgets()
for value in values:
b = Factory.MultiSelectOption(text=value)
b.bind(state=self.select_value)
self.dropdown.add_widget(b)
def select_value(self, instance, value):
if value == 'down':
if instance.text not in self.selected_values:
self.selected_values.append(instance.text)
else:
if instance.text in self.selected_values:
self.selected_values.remove(instance.text)
def on_selected_values(self, instance, value):
if value:
self.text = ', '.join(value)
else:
self.text = ''
kv = '''
BoxLayout:
orientation: 'vertical'
BoxLayout:
Label:
text: 'Color selection'
MultiSelectSpinner:
id: color
values: 'White','Black'
BoxLayout:
Label:
text: 'Shape selection'
MultiSelectSpinner:
id: shape
values: 'Circle','Square'
<[email protected]>:
size_hint: 1, None
height: '60dp'
'''
runTouchApp(Builder.load_string(kv))
Даже если добавить их все еще, кажется, не работает в моем коде: – Hector
Защиту __init __ (я, auto_dismiss = False, dismiss_on_select = False, ** kwargs): супер (MultiSelectSpinner, самость) .__ INIT __ (auto_dismiss = Ложные, dismiss_on_select = False, ** kwargs) self.bind (on_release = self.toggle_dropdown) защиту toggle_dropdown (я, auto_dismiss = False, dismiss_on_select = False, *): Args защиту update_dropdown (я, auto_dismiss = False, reject_on_select = False, * args): – Hector
@Hector Is 'MultiSelectSpinner'' DropDown'? Нет. Где находится «DropDown»? 'self.dropdown = DropDown()', поэтому обновляйте объект _that_, а не '__init__' случайной вещи. :П – KeyWeeUsr