如何将 TextField 的值插入到 KivyMD 中的列表项中
How to insert value of TextField into List Item in KivyMD
我正在尝试制作一个应用程序。单击屏幕右下角的按钮,会出现一个对话框 window(弹出窗口)。在“完成”上单击弹出窗口 window 关闭(close_dialog 方法),并出现一个新的列表项。 List Item 的文本预计将通过以下代码从弹出窗口的 MDTextField 中获取:
mylist = TwoLineAvatarListItem(text = DialogContent().textfield.text,
secondary_text = "1,2,3...")
据我所知,我需要在 .kv 文件中从另一个 class Container
引用 DialogContent
class,但我不知道如何正确地做。我该如何解决?
Code.py:
from kivy.lang import Builder
from kivy.core.window import Window
from kivymd.app import MDApp
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.scrollview import ScrollView
from kivymd.uix.button import MDFlatButton
from kivymd.uix.dialog import MDDialog
from kivymd.uix.textfield import MDTextField
from kivy.uix.textinput import TextInput
from kivy.uix.screenmanager import Screen, ScreenManager
from kivymd.uix.list import TwoLineAvatarListItem
Window.size = (288, 511)
class DialogContent(BoxLayout):
pass
class Container(Screen):
dialog = None
def show_dialog(self, *args):
'''
Create group creation popup
'''
if not self.dialog:
self.dialog = MDDialog(
title="Create new group",
type="custom",
content_cls=DialogContent(),
auto_dismiss=False
)
self.dialog.open()
def close_dialog(self, *args):
'''
Close popup on Done click
'''
self.dialog.dismiss()
self.new_window()
def new_window(self, *args):
'''
Create new group button
'''
mylist = TwoLineAvatarListItem(text = DialogContent().textfield.text,
secondary_text = "1,2,3...")
self.mdlist.add_widget(mylist)
class grudget4App(MDApp):
def build(self):
container = Container()
scroll = ScrollView()
return container
if __name__ == '__main__':
grudget4App().run()
代码.kv:
<DialogContent>:
textfield: textfield
orientation: "vertical"
spacing: "12dp"
size_hint_y: None
height: "120dp"
MDTextField:
id: textfield
hint_text: "Group name"
MDFlatButton:
id: btn1
text: "Done"
text_color: self.theme_cls.primary_color
on_release: app.root.close_dialog()
<Container>:
mdlist: mdlist
FloatLayout:
size_hint: 1, 0.89
ScrollView:
MDList:
id: mdlist
MDFloatingActionButton:
pos_hint: {'right': 0.95, 'y': 0.05}
icon: "icon.png"
theme_text_color: "Custom"
text_color: app.theme_cls.primary_color
on_release:
root.show_dialog()
Screen:
NavigationLayout:
ScreenManager:
Screen:
BoxLayout:
orientation: 'vertical'
MDToolbar:
title: ''
size_hint: 1, 0.14
left_action_items: [["menu", lambda x: nav_drawer.toggle_nav_drawer()]]
elevation:10
Widget:
MDNavigationDrawer:
id: nav_drawer
代码:
mylist = TwoLineAvatarListItem(text = DialogContent().textfield.text,
secondary_text = "1,2,3...")
正在创建 DialogContent
的新实例,与显示中出现的 DialogContent
无关。要访问正确的实例,请使用:
mylist = TwoLineAvatarListItem(text = self.dialog.content_cls.textfield.text,
secondary_text = "1,2,3...")
我正在尝试制作一个应用程序。单击屏幕右下角的按钮,会出现一个对话框 window(弹出窗口)。在“完成”上单击弹出窗口 window 关闭(close_dialog 方法),并出现一个新的列表项。 List Item 的文本预计将通过以下代码从弹出窗口的 MDTextField 中获取:
mylist = TwoLineAvatarListItem(text = DialogContent().textfield.text,
secondary_text = "1,2,3...")
据我所知,我需要在 .kv 文件中从另一个 class Container
引用 DialogContent
class,但我不知道如何正确地做。我该如何解决?
Code.py:
from kivy.lang import Builder
from kivy.core.window import Window
from kivymd.app import MDApp
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.scrollview import ScrollView
from kivymd.uix.button import MDFlatButton
from kivymd.uix.dialog import MDDialog
from kivymd.uix.textfield import MDTextField
from kivy.uix.textinput import TextInput
from kivy.uix.screenmanager import Screen, ScreenManager
from kivymd.uix.list import TwoLineAvatarListItem
Window.size = (288, 511)
class DialogContent(BoxLayout):
pass
class Container(Screen):
dialog = None
def show_dialog(self, *args):
'''
Create group creation popup
'''
if not self.dialog:
self.dialog = MDDialog(
title="Create new group",
type="custom",
content_cls=DialogContent(),
auto_dismiss=False
)
self.dialog.open()
def close_dialog(self, *args):
'''
Close popup on Done click
'''
self.dialog.dismiss()
self.new_window()
def new_window(self, *args):
'''
Create new group button
'''
mylist = TwoLineAvatarListItem(text = DialogContent().textfield.text,
secondary_text = "1,2,3...")
self.mdlist.add_widget(mylist)
class grudget4App(MDApp):
def build(self):
container = Container()
scroll = ScrollView()
return container
if __name__ == '__main__':
grudget4App().run()
代码.kv:
<DialogContent>:
textfield: textfield
orientation: "vertical"
spacing: "12dp"
size_hint_y: None
height: "120dp"
MDTextField:
id: textfield
hint_text: "Group name"
MDFlatButton:
id: btn1
text: "Done"
text_color: self.theme_cls.primary_color
on_release: app.root.close_dialog()
<Container>:
mdlist: mdlist
FloatLayout:
size_hint: 1, 0.89
ScrollView:
MDList:
id: mdlist
MDFloatingActionButton:
pos_hint: {'right': 0.95, 'y': 0.05}
icon: "icon.png"
theme_text_color: "Custom"
text_color: app.theme_cls.primary_color
on_release:
root.show_dialog()
Screen:
NavigationLayout:
ScreenManager:
Screen:
BoxLayout:
orientation: 'vertical'
MDToolbar:
title: ''
size_hint: 1, 0.14
left_action_items: [["menu", lambda x: nav_drawer.toggle_nav_drawer()]]
elevation:10
Widget:
MDNavigationDrawer:
id: nav_drawer
代码:
mylist = TwoLineAvatarListItem(text = DialogContent().textfield.text,
secondary_text = "1,2,3...")
正在创建 DialogContent
的新实例,与显示中出现的 DialogContent
无关。要访问正确的实例,请使用:
mylist = TwoLineAvatarListItem(text = self.dialog.content_cls.textfield.text,
secondary_text = "1,2,3...")