рдбреНрд░реЙрдкрдбрд╛рдЙрди рдирд╡реАрдирддрдо рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдФрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдмрд┐рд▓реНрдбреЛрдЬрд░ рдХреЗ android_new
рдЯреВрд▓рдЪреИрди рдХреЗ рд╕рд╛рде рдПрдВрдбреНрд░реЙрдЗрдб рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдкрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛
from kivy.app import App
from kivy.lang import Builder
kv = '''
BoxLayout:
orientation: 'vertical'
BoxLayout:
size_hint_y: None
height: '50sp'
Button:
id: button
text: 'Open dropdown'
Widget:
DropDown:
id: dropdown
on_parent: self.dismiss()
Button:
size_hint_y: None
text: 'item 1'
Button:
size_hint_y: None
text: 'item 2'
Button:
size_hint_y: None
text: 'item 3'
'''
class MyApp(App):
def build(self):
self.root = Builder.load_string(kv)
self.root.ids.button.bind(on_release=self.root.ids.dropdown.open)
return self.root
MyApp().run()
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдерд┐рд░ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рдРрд╕рд╛ рдХреЛрдб рдЖрддрд╛ рд╣реИ) рдФрд░ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдпрд╣реА рджреЗрдЦрддреЗ рд╣реИрдВ:
рд╕рдм рдХреБрдЫ рдЕрдм рддрдХ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ, _рдЕрднреА_ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХрд╛ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ _рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Dropdown.open(<widget>)
) рдФрд░ _not_ рдЗрд╕реЗ рдХрд┐рд╕реА рд╡рд┐рдЬреЗрдЯ рдореЗрдВ _as a child_ рдЬреЛрдбрд╝реЗрдВред рдареАрдХ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рддрд░рд╣ рд╕реЗ on_parent: self.dismiss()
рд╕реЗ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрд╕рдХрд╛ рдЧрд▓рдд рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛ред рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ (рд╡рд╛рдХреНрдп: рдбреА)!
<widget>.bind(<stuff>)
DropDown.open()
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ - рдмрдЯрди рдХрд╛ рдЙрджрд╛рд╣рд░рдгon_parent
рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИрддреЛ рдЕрдм рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ on_parent
рдЙрдкрдпреЛрдЧ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
<MyDropDown>: # make a class in python (or use "@DropDown" and Factory)
text: 'blah'
# and *don't* add it as a child manually
рдЬреЛ рд╕реАрдзреЗ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдХреЗрд╡реА рдирд┐рдпрдо рдмрдирд╛ рд░рд╣рд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрдХреНрд╖рд╛ рдмрдирд╛рдо рдЙрджрд╛рд╣рд░рдг рддреБрд▓рдирд╛) рдпрд╛ рдпрджрд┐ рдЖрдк рд╡рд┐рдЬреЗрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ Spinner
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЖрдк on_parent
рдИрд╡реЗрдВрдЯ рдХреЛ рдЕрдирдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реАрдзреЗ on_parent
рдпрд╛ рдХреЗрд╡рд▓ рдмрд╛рд╣рд░ рд╕реЗ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдмрджрд╕реВрд░рдд рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ "рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ" , рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред рдореИрдВ
рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдирдП рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ DropDown
рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛
рдХреНрдпрд╛ рдЖрдк рдХреЗрд╡реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ @DropDown рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдореЗрд░реЗ рдкрд╛рд╕ kivy 1.10.1, windows 10, python 3.7 рд╣реИ рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдореИрдВ on_parent: self.dismiss() рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛ (рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ)
рдмрдЯрди рдкрд░ on_parent: self.dismiss()
рдбрд╛рд▓рдиреЗ рд╕реЗ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рд╣реЛрддрд╛ рд╣реИред рдРрдк рдХреЗ рдкрд╣рд▓реА рдмрд╛рд░ рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдирд╣реАрдВ рдЦреЛрд▓реЗрдЧрд╛ рдФрд░ рдПрдХ рдмрд╛рд░ рдЦреБрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдХреЙрд▓ рдХреЛ рдЗрд╕рдореЗрдВ рдмрджрд▓реЗрдВ: on_parent: dropdown.dismiss()
ред
рдпрд╣ рдереЛрдбрд╝рд╛ "рд╣реИрдХреА" рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
#:kivy 1.0
<InputFileDropDown>:
Button:
id: btn
text: 'Input File'
on_parent: dropdown.dismiss()
on_release: dropdown.open(self)
size_hint_y: None
height: 35
DropDown:
id: dropdown
on_select: btn.text = '{}'.format(args[1])
Button:
text: 'First Item'
size_hint_y: None
height: 35
on_release: dropdown.select('First Item')
Label:
text: 'Second Item'
size_hint_y: None
height: 35
Button:
text: 'Third Item'
size_hint_y: None
height: 35
on_release: dropdown.select('Third Item')
'рдЗрдирдкреБрдЯрдлрд╛рдЗрд▓рдбреНрд░реЙрдкрдбрд╛рдЙрди' рдПрдХ BoxLayout fyi рд╣реИред
@ рдЧреИрд░реАрдмреЗрд░
... рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХрд╛ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрддрд╛ рд╣реИ (рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдУрдкрди (
)) рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рди рдЬреЛрдбрд╝реЗрдВред ...
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдмрдЯрди рдкрд░
on_parent: self.dismiss()
рдбрд╛рд▓рдиреЗ рд╕реЗ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рд╣реЛрддрд╛ рд╣реИред рдРрдк рдХреЗ рдкрд╣рд▓реА рдмрд╛рд░ рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдирд╣реАрдВ рдЦреЛрд▓реЗрдЧрд╛ рдФрд░ рдПрдХ рдмрд╛рд░ рдЦреБрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛редрдХреЙрд▓ рдХреЛ рдЗрд╕рдореЗрдВ рдмрджрд▓реЗрдВ:
on_parent: dropdown.dismiss()
редрдпрд╣ рдереЛрдбрд╝рд╛ "рд╣реИрдХреА" рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
'рдЗрдирдкреБрдЯрдлрд╛рдЗрд▓рдбреНрд░реЙрдкрдбрд╛рдЙрди' рдПрдХ BoxLayout fyi рд╣реИред