如何解决Kivymd 自定义列表对话框无法在 mddialog 中插入可变列表
我正在尝试在 kivyMD 的自定义对话框中添加一个可更改的列表。问题是当我调用 self.adding()
时,列表出现在我的 FloatLayout
中,而不是在对话框中。
我知道这是因为我在 FloatLayout
中调用了“内容”。我这样做是因为我想使用 ObjectProperty 但效果不佳。我真的不知道我能做些什么来解决这个问题。
抱歉我的英语不好。
代码:
from kivy.lang import Builder
from kivy.uix.Boxlayout import BoxLayout
from kivymd.app import MDApp
from kivymd.uix.button import MDFlatButton
from kivymd.uix.dialog import mddialog
from kivymd.uix.list import OneLineListItem,MDList
from kivy.properties import ObjectProperty
KV = '''
<Content>
name:"content"
draw:container
orientation: "vertical"
ScrollView:
MDList:
id: container
FloatLayout:
mgr:cont
Content:
id:cont
MDFlatButton:
text: "ALERT DIALOG"
pos_hint: {'center_x': .5,'center_y': .5}
on_release: app.show_confirmation_dialog()
'''
class Content(BoxLayout):
draw=ObjectProperty(None)
class Example(MDApp):
dialog = None
mgr=ObjectProperty(None)
def adding(self):
for i in range(20):
self.root.mgr.draw.add_widget(OneLineListItem(text=f"Single-line item {i}"))
def build(self):
return Builder.load_string(KV)
def show_confirmation_dialog(self):
# def adding(self):
# for i in range(20):
# container.add_widget(OneLineListItem(text=f"Single-line item {i}"))
if not self.dialog:
self.dialog = mddialog(
title="Address:",type="custom",content_cls=Content(),)
self.adding()
self.dialog.open()
Example().run()
解决方法
我通过编辑我的代码解决了这个问题:
新代码:
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivymd.app import MDApp
from kivymd.uix.button import MDFlatButton
from kivymd.uix.dialog import MDDialog
from kivymd.uix.list import OneLineListItem,MDList
KV = '''
<Content>
# name:"content"
# draw:container
orientation: "vertical"
ScrollView:
MDList:
id: container
FloatLayout:
# mgr:cont
# Content:
# id:cont
MDFlatButton:
text: "ALERT DIALOG"
pos_hint: {'center_x': .5,'center_y': .5}
on_release: app.show_confirmation_dialog()
'''
class Content(BoxLayout):
def __init__(self,*args,**kwargs):
super().__init__(**kwargs)
self.container= self.ids.container
print("content called")
def adding(self):
for i in range(20):
self.container.add_widget(OneLineListItem(text=f"Single-line item {i}"))
print("adding called")
adding(self)
class Example(MDApp):
dialog = None
def build(self):
return Builder.load_string(KV)
def show_confirmation_dialog(self):
if not self.dialog:
self.dialog = MDDialog(
title="Address:",type="custom",content_cls=Content(),)
self.dialog.open()
Example().run()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。