์ต์ ๋ฒ์ ์์๋ ๋๋กญ๋ค์ด์ด ์๋ํ์ง ์์ต๋๋ค. ์ด์ ์์ด ๋ํ๋ฌ๋ค๊ฐ ๋ซํ๋๋ค. ์ด ๋ฌธ์ ๋ buildozer์ android_new
๋๊ตฌ ์ฒด์ธ์ ์ฌ์ฉํ๋ Android ๋น๋์์๋ง ๋ฐ์ํ์ต๋๋ค.
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()
๋๋ ๊ทธ๊ฒ์ด ์์ ์ ์ธ ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ๊ณ (์ ์ด๋ ๊ทธ๋ฐ ์ฝ๋๊ฐ ๋์ค๋ ๊ณณ์์) ๋ง์คํฐ์์ ์์ ๋์์ต๋๋ค. ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ชจ๋ ์ฌ์ฉ์๊ฐ (์์ ์์ ์ ํ๋์ ํตํด ๋ญ๊ฐ๋ฅผ _attach_ํ๋๋ก๋์ด ์๋ค๋ ์ ์ด๋ค ๋๋กญ ๋ค์ด์ behing ๋
ผ๋ฆฌ _yet_, ์ง๊ธ๊น์ง ๋ฒ๊ธ์ ๋ณด์ธ๋ค Dropdown.open(<widget>)
)๊ณผ ์ผ๋ถ ์์ ฏ์ CHILD_์ _as ์ถ๊ฐ _not_. ๊ธ์, ์ฒ์์ ์๋ชป ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ 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
์ด๋ ์ง์ ์์์ผ๋ก ์ฌ์ฉํ์ง ์๊ณ KV ๊ท์น ์์ฒด ๋ง ๋ง๋๋ Spinner
๋ฅผ ํด๋น ๋ชฉ์ ์ ์ํ ๋น๋๋ก ์ฌ์ฉํ์ญ์์ค.
์ด๋ก ์ ์ผ๋ก on_parent
์์ ์ง์ ๋๋ ์ธ๋ถ์์๋ง์ธ์ง ํ์คํ์ง ์์ง๋ง on_parent
์ด๋ฒคํธ๋ฅผ ๋ฐ์ธ๋ฉ ํด์ ํ ์ ์์ง๋ง "์๋ํ๊ฒ ๋ง๋๋" ๋ฐฉ๋ฒ์ ์ถ์
ํฉ๋๋ค. , ๊ทธ๋์ ์ฐ์ง ์๊ฒ ์ต๋๋ค. ๐
๊ฐ์ฌ ํด์. ๋๋ DropDown
๋ฅผ ์ ํด๋์ค๋ก ์ฌ์ฉํ๊ณ ์ด๊ฒ์ด ํจ๊ณผ๊ฐ ์์์ต๋๋ค.
kv ํ์ผ์์ @DropDown ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ
๋๋ kivy 1.10.1, Windows 10, python 3.7์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ on_parent: self.dismiss()๋ฅผ ์์ฑํ์ง ์์ผ๋ฉด ์๋ํฉ๋๋ค.
๋ฒํผ์ on_parent: self.dismiss()
๋ฅผ ๋ฃ์ผ๋ฉด ์๋ํ ๋๋ก ์๋ํฉ๋๋ค. ์ฑ์ด ์ฒ์ ์คํ๋ ๋ ์๋์ผ๋ก DropDown์ ์ด์ง ์์ผ๋ฉฐ ์ด๋ฆฌ๋ฉด ์๋์ผ๋ก DropwDown์ ๋ซ์ง ์์ต๋๋ค.
ํธ์ถ์ 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')
'InputFileDropDown'์ ์ฐธ๊ณ ์ฉ BoxLayout์ ๋๋ค.
@GaryBer
... DropDown์ ๋ ผ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ์ด๋ฅผ ๋ฌด์ธ๊ฐ์ ์ฒจ๋ถํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค(Dropdown.open(
)) ์ผ๋ถ ์์ ฏ์ ์์์ผ๋ก ์ถ๊ฐํ์ง ๋ง์ญ์์ค. ...
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฒํผ์
on_parent: self.dismiss()
๋ฅผ ๋ฃ์ผ๋ฉด ์๋ํ ๋๋ก ์๋ํฉ๋๋ค. ์ฑ์ด ์ฒ์ ์คํ๋ ๋ ์๋์ผ๋ก DropDown์ ์ด์ง ์์ผ๋ฉฐ ์ด๋ฆฌ๋ฉด ์๋์ผ๋ก DropwDown์ ๋ซ์ง ์์ต๋๋ค.ํธ์ถ์
on_parent: dropdown.dismiss()
๋ณ๊ฒฝํฉ๋๋ค.์ฝ๊ฐ "ํดํค"ํ์ง๋ง ์ ์๋ํฉ๋๋ค.
'InputFileDropDown'์ ์ฐธ๊ณ ์ฉ BoxLayout์ ๋๋ค.