我有两个文件--一个是py,另一个是kv,正如标题所述,我不知道如何添加下拉列表。
-> main.py
from kivy.app import App
from kivy.uix.dropdown import DropDown
from kivy.uix.gridlayout import GridLayout
class MyGridLayout(GridLayout):
pass
class LayoutsApp(App):
def build(self):
return MyGridLayout()
if __name__ == '__main__':
LayoutsApp().run()-> layouts.kv
<MyGridLayout>:
rows: 2
id: main_win
Dropdown:
id: dropdown
Button:
id: btn1
text: 'option 1'
Button:
id: btn2
text: 'option 2'
BoxLayout:
BoxLayout:编译时,它会为该部分生成错误。怎样才能正确地调用下拉列表呢?
发布于 2019-03-20 05:01:47
问题3
调用按钮id: btn2,我将如何做?-我的意思是:类MyGridLayout(GridLayout):
解决方案3
Python脚本
from kivy.uix.dropdown import DropDown;from kivy.properties import ObjectPropertyclass CustomDropDown(DropDown):dropdown = ObjectProperty(None);实现方法dropdown_open(self):;实例化类CustomDropDown并将其分配给self.dropdown等)。kv文件
<CustomDropdown@DropDown>:替换为类规则、<CustomDropDown>:rows: 2替换为rows: 3Factory.CustomDropdown().open(self)替换为root.dropdown_open(self)示例3
main.py -片段
from kivy.uix.dropdown import DropDown
from kivy.properties import ObjectProperty
class CustomDropDown(DropDown):
pass
class MyGridLayout(GridLayout):
dropdown = ObjectProperty(None)
def dropdown_open(self, instance):
self.dropdown = CustomDropDown()
self.dropdown.open(instance)
print(self.dropdown.ids.btn2.text)layouts.kv -片段
<CustomDropDown>:
id: dropdown
on_select:
app.root.ids.btn.text = '{}'.format(args[1])
...
<MyGridLayout>:
rows: 3
id: main_win
Button:
id: btn
text: 'Press'
size_hint_y: None
height: '48dp'
on_release:
root.dropdown_open(self)产出3

问题2
当我添加这些命令时,它不起作用: BoxLayout:方位:“垂直”size_hint:(.9,.9) BoxLayout: BoxLayout:“垂直”size_hint_y: 0.5
备注
您可能需要将行从2增加到3。
例2
layouts.kv
#:kivy 1.10.1
#:import Factory kivy.factory.Factory
<CustomDropdown@DropDown>:
id: dropdown
on_select:
app.root.ids.btn.text = '{}'.format(args[1])
self.dismiss()
Button:
id: btn1
text: 'option 1'
size_hint_y: None
height: '48dp'
on_release:
dropdown.select(btn1.text)
Button:
id: btn2
text: 'option 2'
size_hint_y: None
height: '48dp'
on_release:
dropdown.select(btn2.text)
<MyGridLayout>:
rows: 2
id: main_win
Button:
id: btn
text: 'Press'
on_release: Factory.CustomDropdown().open(self)
size_hint_y: None
height: '48dp'
BoxLayout:
orientation: 'vertical'
size_hint: (.9,.9)
canvas.before:
Color:
rgba: 1, 0, 0, 1 # red
Rectangle:
pos: self.pos
size: self.size
BoxLayout:
orientation: 'vertical'
size_hint_y: 0.5
canvas.before:
Color:
rgba: 0, 0, 1, 1 # blue
Rectangle:
pos: self.pos
size: self.size输出#2



解决方案1
DropDown小部件就像弹出小部件,即它们是特殊的小部件。
DropDown是一个特殊的小部件。不要试图将它作为子部件添加到任何其他部件中。如果这样做,弹出/ DropDown将像普通小部件一样处理,不会隐藏在后台创建。
因此,创建一个带有DropDown小部件继承的动态类,并使用Factory实例化该类。
示例
main.py
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
class MyGridLayout(GridLayout):
pass
class LayoutsApp(App):
def build(self):
return MyGridLayout()
if __name__ == '__main__':
LayoutsApp().run()layouts.kv
#:kivy 1.10.1
#:import Factory kivy.factory.Factory
<CustomDropdown@DropDown>:
id: dropdown
on_select:
app.root.ids.btn.text = '{}'.format(args[1])
self.dismiss()
Button:
id: btn1
text: 'option 1'
size_hint_y: None
height: '48dp'
on_release:
dropdown.select(btn1.text)
Button:
id: btn2
text: 'option 2'
size_hint_y: None
height: '48dp'
on_release:
dropdown.select(btn2.text)
<MyGridLayout>:
rows: 2
id: main_win
Button:
id: btn
text: 'Press'
on_release: Factory.CustomDropdown().open(self)
size_hint_y: None
height: '48dp'
BoxLayout:
BoxLayout:输出



https://stackoverflow.com/questions/55252508
复制相似问题