Kivy: рдЦреБрд▓рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдбреНрд░реЙрдкрдбрд╛рдЙрди рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдЕрдкреНрд░реИрд▓ 2017  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: kivy/kivy

рд╕рдВрд╕реНрдХрд░рдгреЛрдВ

  • рдкрд╛рдпрдерди: 2.7
  • рдУрдПрд╕: рдПрдВрдбреНрд░реЙрдЗрдб
  • рдХреАрд╡реА: рдорд╛рд╕реНрдЯрд░

рд╡рд┐рд╡рд░рдг

рдбреНрд░реЙрдкрдбрд╛рдЙрди рдирд╡реАрдирддрдо рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдФрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдмрд┐рд▓реНрдбреЛрдЬрд░ рдХреЗ 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()

Apk

MyApp-debug.zip

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдмрдЯрди рдкрд░ 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 рд╣реИред

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдерд┐рд░ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рдРрд╕рд╛ рдХреЛрдб рдЖрддрд╛ рд╣реИ) рдФрд░ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдпрд╣реА рджреЗрдЦрддреЗ рд╣реИрдВ:

  • рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЛ рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рд╣реИ) -> рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╣реИрдВ
  • on_parent рдШрдЯрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЧрдИ рд╣реИ -> рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджреЗрддрд╛ рд╣реИ

рд╕рдм рдХреБрдЫ рдЕрдм рддрдХ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ, _рдЕрднреА_ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХрд╛ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ _рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Dropdown.open(<widget>) ) рдФрд░ _not_ рдЗрд╕реЗ рдХрд┐рд╕реА рд╡рд┐рдЬреЗрдЯ рдореЗрдВ _as a child_ рдЬреЛрдбрд╝реЗрдВред рдареАрдХ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рддрд░рд╣ рд╕реЗ on_parent: self.dismiss() рд╕реЗ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрд╕рдХрд╛ рдЧрд▓рдд рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛ред рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ (рд╡рд╛рдХреНрдп: рдбреА)!

  • рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк (рдЕрдм рд╕рд╣реА рдврдВрдЧ рд╕реЗ) рдЗрд╕реЗ рд╡рд┐рдЬреЗрдЯ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ <widget>.bind(<stuff>) DropDown.open() рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ - рдмрдЯрди рдХрд╛ рдЙрджрд╛рд╣рд░рдг
  • рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЛ рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╢рд╛рдпрдж рдмрдЯрди рдкрд░, рдореБрдЭреЗ рдЕрдм рдпрдХреАрди рдирд╣реАрдВ рд╣реИ) рдФрд░ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХрд╛ on_parent рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  • 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 рд╣реИред

@ рдЧреИрд░реАрдмреЗрд░

... рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХрд╛ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрддрд╛ рд╣реИ (рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдУрдкрди ()) рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рди рдЬреЛрдбрд╝реЗрдВред ...

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

phelantomas picture phelantomas  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

37 picture 37  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

damienflament picture damienflament  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

blurymind picture blurymind  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

thagh05t picture thagh05t  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ