KivyMD 滚动视图示例
KivyMD Scrollview Example
我找到了这个使用 MDlist 处理滚动视图的 kivymd 示例。
我正在努力做到这一点 运行。
我不熟悉我收到的错误代码,到目前为止我没有找到任何帮助。
这是代码:
from kivy.lang import Builder
from kivy.uix.scrollview import ScrollView
from kivymd.app import MDApp
kv =""""
<scrollview>
ScrollView:
do_scroll_x: False # Important for MD compliance
MDList:
OneLineListItem:
text: "Single-line item"
TwoLineListItem:
text: "Two-line item"
secondary_text: "Secondary text here"
ThreeLineListItem:
text: "Three-line item"
secondary_text: "This is a multi-line label where you can fit more text than usual"
"""
class MainApp(MDApp):
def build(self):
self.root_widget = Builder.load_string(kv)
sv = ScrollView()
ml = MDList()
sv.add_widget(ml)
contacts = ["Paula", "John", "Kate", "Vlad"]
for c in contacts:
ml.add_widget(
OneLineListItem(
text=c
)
)
return self.root_widget
if __name__ == '__main__':
MainApp().run()
请帮忙!
我不明白你的 kv
字符串。首先,开头和结尾的引号应该匹配(以 4 开头,以 3 结尾)。其次,您有一个 <scrollview>
条目。我不认为这是一个合法的条目。第三,您的 kv
字符串的其余部分缩进不一致。看起来您的 kv
字符串正在尝试创建一个包含 MDList
的 ScrollView
。如果可行,那么您在 build()
方法中对 ScrollView
的调用将创建这样一个包含 MDList
的 ScrollView
。然后行 sv.add_widget(ml)
将尝试向 ScrollView
添加第二个 MDList
(这应该会产生错误,因为 ScrollView
中只允许一个 child ).然后 build()
方法返回 self.root_widget
,这与您刚刚创建的 sv
无关。
所以这里是您的代码的修改版本,它使用您在 build()
方法中创建的 sv
:
from kivy.uix.scrollview import ScrollView
from kivymd.app import MDApp
from kivymd.uix.list import MDList, OneLineListItem
class MainApp(MDApp):
def build(self):
sv = ScrollView()
ml = MDList()
sv.add_widget(ml)
contacts = ["Paula", "John", "Kate", "Vlad"]
for c in contacts:
ml.add_widget(
OneLineListItem(
text=c
)
)
return sv
if __name__ == '__main__':
MainApp().run()
如果您向 contacts
列表中添加了足够多的姓名,滚动将起作用。
我不知道这是否有帮助。但我最近又开始使用 Kivy 开发应用程序,我有一个带有 MDList 的 ScrollView,如下所示:
<Manager>:
Main:
id: main
name: 'main'
<Main>:
BoxLayout:
orientation: 'vertical'
MDToolbar:
id: toolbar
title: "Email Assistant"
md_bg_color: app.theme_cls.primary_dark
elevation: 9
left_action_items: [["help-circle-outline", lambda x: app.root.get_screen('main').open_dialog()]]
BoxLayout:
orientation: 'horizontal'
columns: 3
ScrollView:
MDList:
id: container
ScrollView:
MDList:
id: container_two
OneLineListItem:
text: 'hello'
ScrollView:
Label:
id: msg
text: 'message'
<Main>:
是我的 python 文件中的 class,我每次加载时都使用 MDList id
输入联系人列表。
重要的旁注,我的 EmailAssistantApp 中没有我的列表 class:
class Manager(ScreenManager):
pass
class Main(Screen):
def on_kv_post(self, *args):
for name, email in load_db(database_file).items():
self.ids.container.add_widget(
NameList(text=name, icon='account')
)
def selected(self, n):
self.ids.name.text = n
class EmailAssistantApp(MDApp):
def build(self):
self.theme_cls = ThemeManager()
return Manager()
我找到了这个使用 MDlist 处理滚动视图的 kivymd 示例。 我正在努力做到这一点 运行。
我不熟悉我收到的错误代码,到目前为止我没有找到任何帮助。
这是代码:
from kivy.lang import Builder
from kivy.uix.scrollview import ScrollView
from kivymd.app import MDApp
kv =""""
<scrollview>
ScrollView:
do_scroll_x: False # Important for MD compliance
MDList:
OneLineListItem:
text: "Single-line item"
TwoLineListItem:
text: "Two-line item"
secondary_text: "Secondary text here"
ThreeLineListItem:
text: "Three-line item"
secondary_text: "This is a multi-line label where you can fit more text than usual"
"""
class MainApp(MDApp):
def build(self):
self.root_widget = Builder.load_string(kv)
sv = ScrollView()
ml = MDList()
sv.add_widget(ml)
contacts = ["Paula", "John", "Kate", "Vlad"]
for c in contacts:
ml.add_widget(
OneLineListItem(
text=c
)
)
return self.root_widget
if __name__ == '__main__':
MainApp().run()
请帮忙!
我不明白你的 kv
字符串。首先,开头和结尾的引号应该匹配(以 4 开头,以 3 结尾)。其次,您有一个 <scrollview>
条目。我不认为这是一个合法的条目。第三,您的 kv
字符串的其余部分缩进不一致。看起来您的 kv
字符串正在尝试创建一个包含 MDList
的 ScrollView
。如果可行,那么您在 build()
方法中对 ScrollView
的调用将创建这样一个包含 MDList
的 ScrollView
。然后行 sv.add_widget(ml)
将尝试向 ScrollView
添加第二个 MDList
(这应该会产生错误,因为 ScrollView
中只允许一个 child ).然后 build()
方法返回 self.root_widget
,这与您刚刚创建的 sv
无关。
所以这里是您的代码的修改版本,它使用您在 build()
方法中创建的 sv
:
from kivy.uix.scrollview import ScrollView
from kivymd.app import MDApp
from kivymd.uix.list import MDList, OneLineListItem
class MainApp(MDApp):
def build(self):
sv = ScrollView()
ml = MDList()
sv.add_widget(ml)
contacts = ["Paula", "John", "Kate", "Vlad"]
for c in contacts:
ml.add_widget(
OneLineListItem(
text=c
)
)
return sv
if __name__ == '__main__':
MainApp().run()
如果您向 contacts
列表中添加了足够多的姓名,滚动将起作用。
我不知道这是否有帮助。但我最近又开始使用 Kivy 开发应用程序,我有一个带有 MDList 的 ScrollView,如下所示:
<Manager>:
Main:
id: main
name: 'main'
<Main>:
BoxLayout:
orientation: 'vertical'
MDToolbar:
id: toolbar
title: "Email Assistant"
md_bg_color: app.theme_cls.primary_dark
elevation: 9
left_action_items: [["help-circle-outline", lambda x: app.root.get_screen('main').open_dialog()]]
BoxLayout:
orientation: 'horizontal'
columns: 3
ScrollView:
MDList:
id: container
ScrollView:
MDList:
id: container_two
OneLineListItem:
text: 'hello'
ScrollView:
Label:
id: msg
text: 'message'
<Main>:
是我的 python 文件中的 class,我每次加载时都使用 MDList id
输入联系人列表。
重要的旁注,我的 EmailAssistantApp 中没有我的列表 class:
class Manager(ScreenManager):
pass
class Main(Screen):
def on_kv_post(self, *args):
for name, email in load_db(database_file).items():
self.ids.container.add_widget(
NameList(text=name, icon='account')
)
def selected(self, n):
self.ids.name.text = n
class EmailAssistantApp(MDApp):
def build(self):
self.theme_cls = ThemeManager()
return Manager()