그래서이 페이지에서 드롭 다운 메뉴를 가질 수있는 방법은 최소한 두 가지가 있어야한다고 생각합니다. 그러나 둘 다 작동하지 않을 수 있습니다. 나는 kivy와 프로그래밍에 익숙하지 않지만 일반적으로 문서를 읽었으며 이해가 안되는 것 같습니다.kivy에서 python 클래스로 드롭 다운 위젯을 사용하는 방법
I는 다음과 같은 예를 만들었다 :
import kivy
kivy.require('1.7.2') # replace with your current kivy version !
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty
from kivy.uix.button import Button
from kivy.uix.dropdown import DropDown
class CustomDropDown(DropDown):
pass
class HomeScreen(Screen):
translateInput = ObjectProperty(None)
translateButton = ObjectProperty(None)
translateLabel = ObjectProperty(None)
top_layout = ObjectProperty(None)
dd_btn = ObjectProperty(None)
drop_down = CustomDropDown()
#notes_dropdown = ObjectProperty(None)
dropdown = DropDown()
notes = ['Features', 'Suggestions', 'Abreviations', 'Miscellaneous']
for note in notes:
# when adding widgets, we need to specify the height manually (disabling
# the size_hint_y) so the dropdown can calculate the area it needs.
btn = Button(text='%r' % note, size_hint_y=None, height=30)
# for each button, attach a callback that will call the select() method
# on the dropdown. We'll pass the text of the button as the data of the
# selection.
btn.bind(on_release=lambda btn: dropdown.select(btn.text))
# then add the button inside the dropdown
dropdown.add_widget(btn)
# create a big main button
mainbutton = Button(text='Usage Notes 2', size_hint=(1, 1))
# show the dropdown menu when the main button is released
# note: all the bind() calls pass the instance of the caller (here, the
# mainbutton instance) as the first argument of the callback (here,
# dropdown.open.).
mainbutton.bind(on_release=dropdown.open)
#dd_btn.bind(on_release=dropdown.open)
# one last thing, listen for the selection in the dropdown list and
# assign the data to the button text.
dropdown.bind(on_select=lambda instance, x: setattr(mainbutton, 'text', x))
#dropdown.bind(on_select=lambda instance, x: setattr(dd_btn, 'text', x))
#top_layout.add_widget(mainbutton)
class dropdApp(App):
def build(self):
return HomeScreen()
if __name__ == '__main__':
dropdApp().run()
및이 해당 .kv 파일이다
#:kivy 1.7.2
<CustomDropDown>:
Button:
text: 'My first Item'
size_hint_y: None
height: 44
on_release: root.select('item1')
Label:
text: 'Unselectable item'
size_hint_y: None
height: 44
Button:
text: 'My second Item'
size_hint_y: None
height: 44
on_release: root.select('item2')
<HomeScreen>:
id: home_screen
translateInput: translateInputID
translateButton: translateButtonID
translateLabel: labelID
top_layout: topLayoutID
#notes_dropdown: notesDropDownID
dd_btn: btn_ddID
orientation: 'vertical'
FloatLayout:
size_hint: 1, .95
TextInput:
id: translateInputID
text: 'cove'
#text: 'ﻰﺸَﻣ'
font_name: "data/fonts/DejaVuSans.ttf"
background_color: 1, 1, 1, 1
size_hint: .75, .1
multiline: False
pos_hint: {'x': .125, 'y': .45}
text_size: self.size
valign: 'middle'
halign: 'center'
padding: 5
Button:
id: translateButtonID
text: 'Translate'
pos_hint: {'x': .35, 'y': .35}
size_hint: .3, .08
valign: 'middle'
halign: 'center'
text_size: self.size
on_release: root.translateButtonPressed()
#on_press: root.manager.current = 'resultsscreen'
Label:
id: labelID
text: 'Translator'
text_size: self.size
valign: 'middle'
halign: 'center'
pos_hint: {'x': .3, 'y': .75}
size_hint: .4, .2
#font_name: "simpo.ttf"
#font_name: "5thgradecursive.ttf"
#font_name: "AGA-Rasheeq-Regular.ttf"
font_name: "data/fonts/DejaVuSans.ttf"
font_size: 50
BoxLayout:
id: topLayoutID
#cols: 2
size_hint: 1, .05
pos_hint: {'x': 0, 'y': .95}
Button:
#id: notesDropDownID
id: btn_ddID
text: 'Usage Notes'
on_release: root.drop_down.open
Button:
text: 'About'
첫 번째 메뉴가 이미 생성 부착되어야 kv 파일 맨 아래의 "사용법 메모"버튼을 클릭하십시오. 그것은 파이썬의 클래스 인 "CustomDropDown"과 kv 파일에 상응합니다. 이 예제는 kivy 문서에서 곧바로 볼 수 있습니다.
drop_down = CustomDropDown()
그것은 파이썬하고 조작 할 수있는 kivy 측면 모두에서 나에게 핸들을 준,하지만 당신은 당신이 그것을 실행할 때 통지 및 "사용주의"를 클릭 하듯 아무 일도 발생하지 않습니다 : I 라인을 만들어 생각했다.
번째 메뉴도 kivy 문서 다음 파이썬 생성된다. 나는 그것이 응용 프로그램의 상단에 "사용법 메모 2"라는 세 번째 버튼을 만들 것이라고 생각합니다. 추가하려고하면 오류가 발생합니다. (내 파일에 대한 53) 현재 라인 : 오류 제기
top_layout.add_widget(mainbutton)
은 주석 또는 응용 프로그램도 실행되지 않을 것입니다 : 내가 설정 않았다는 것을 깨닫게 어느
AttributeError: 'kivy.properties.ObjectProperty' object has no attribute 'add_widget'
을
top_layout = ObjectProperty(None)
는하지만 kivy 많은 위젯 일을 제안 무엇이며,이 오류없이 많은 다른 사람들과 함께 일했다.
나는이 문제 중 하나 또는 둘 모두가 누군가에게 간단하다고 확신합니다. 내가 뭘 놓치고 있니?