1
選択後にドロップダウンリストを表示したままにする(消滅させるのではなく)。私は、BooleanProperty dismiss_on_selectでいくつかの構文を試しましたが、それを理解できないようです。私はPythonとKivyが初めてです。 このプロパティはどこでどのように設定できますか?おかげkivyドロップダウンが自動的に解除される
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を、*引数): デフupdate_dropdown(自己、auto_dismiss = False、dismiss_on_select = False、* args): – Hector
@Hector 'MultiSelectSpinner'は' DropDown'ですか?いいえ。「DropDown」はどこですか? 'self.dropdown = DropDown()'なので、ランダムなものの '__init__'ではなく、_that_オブジェクトを更新します。 :P – KeyWeeUsr