KivyMD Scrollview示例

时间:2020-05-15 18:24:40

标签: python android listview kivy scrollview

我能够找到kivymd使用MDlist处理滚动视图的示例。 我正在努力使其运行。

我对收到的错误代码不熟悉,到目前为止,我找不到任何帮助。

这是代码:

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()

请帮助!

2 个答案:

答案 0 :(得分:0)

我不明白您的kv字符串。首先,开头和结尾的引号应匹配(以4开头,以3结尾)。其次,您有一个<scrollview>条目。我认为这不是合法条目。第三,您的kv字符串的其余部分缩进不一致。您的kv字符串似乎正在尝试创建包含ScrollView的{​​{1}}。如果可行,则您在MDList方法中对ScrollView的调用将创建一个包含build()的{​​{1}}。然后,行ScrollView将尝试向MDList添加第二个sv.add_widget(ml)(这会产生错误,因为MDList中只允许一个孩子)。然后ScrollView方法将返回与刚创建的ScrollView无关的build()

因此,这是使用在self.root_widget方法中创建的sv的代码的修改后的版本:

sv

如果您在build()列表中添加了足够的名称,则滚动将起作用。

答案 1 :(得分:0)

我不知道这是否会有所帮助。但是我最近重新开始使用 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 文件中的一个类,每次加载时我都使用 MDList id 输入联系人列表。

重要的旁注,我的 EmailAssistantApp 类中没有我的列表:

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()