Kivymd 自定义列表对话框。无法在 MD对话框中插入可更改的列表



我正试图在kivyMD中的自定义对话框中添加一个可更改列表。问题是,当我调用self.adding()时,列表显示在我的FloatLayout中,而不是对话框中
我知道那是因为我打电话给"内容";在我的CCD_ 3中。我这样做是因为我想使用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()

最新更新