为了账号安全,请及时绑定邮箱和手机立即绑定

Kivy:为什么ListView在.kv文件中声明不同?

Kivy:为什么ListView在.kv文件中声明不同?

交互式爱情 2021-03-23 15:11:12
对list_simple_in_kv.py进行一些改动,以使用ListAdapter代替SimpleListAdapter,我发现方法1起作用:from kivy.uix.modalview import ModalViewfrom kivy.uix.listview import ListViewfrom kivy.uix.gridlayout import GridLayoutfrom kivy.lang import Builderfrom kivy.app import App#using 'sla'...whatever that means...Builder.load_string("""#:import ListItemButton kivy.uix.listview#:import sla kivy.adapters.listadapter<ListViewModal>:    ListView:        size_hint: .8, .8        adapter:            sla.ListAdapter(            data=["Item #{0}".format(i) for i in range(100)],            cls=ListItemButton.ListItemButton)""")class ListViewModal(ModalView):    def __init__(self, **kwargs):        super(ListViewModal, self).__init__(**kwargs)class MainView(GridLayout):    def __init__(self, **kwargs):        kwargs['cols'] = 1        super(MainView, self).__init__(**kwargs)        listview_modal = ListViewModal()        self.add_widget(listview_modal)class TestApp(App):    def build(self):        root = MainView()        return rootif __name__ == '__main__':    TestApp().run()但是将kv文件更改为这种方式(与我遇到的其他kv API最一致的方式)失败:Builder.load_string("""#:import ListItemButton kivy.uix.listview#:import ListAdapter kivy.adapters.listadapter<ListViewModal>:    size_hint: None, None    size: 400, 400    ListView:        size_hint: .8, .8        ListAdapter:            data: ["Item #{0}".format(i) for i in range(100)]            cls: ListItemButton.ListItemButton""")我什至碰到了这篇文章,这篇文章也是如此,说方法2应该可以在master上工作,但是它却产生了一个异常:File "C:\Python27\lib\site-packages\kivy\adapters\adapter.py", line 102, in __init__     raise Exception('adapter: input must include data argument') Exception: adapter: input must include data argument我在这里想念什么?
查看完整描述

3 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

ListAdapter不是窗口小部件,因此您无法使用尝试使用的语法。我认为,为使代码更具Kivyonic外观,您可以采取的最接近的措施如下。注意,我更改了导入。这看起来类似于向画布添加指令的方式:


Builder.load_string("""

#:import ListItemButton kivy.uix.listview.ListItemButton

#:import ListAdapter kivy.adapters.listadapter.ListAdapter


<ListViewModal>:

    size_hint: None, None

    size: 400, 400

    ListView:

        size_hint: .8, .8

        adapter:

            ListAdapter(data=["Item #{0}".format(i) for i in range(100)], cls = ListItemButton)

""")

** 编辑 **


您还更改了size_hint,因此先前的代码看起来与原始代码有很大不同。这看起来像是原始的。


Builder.load_string("""

#:import ListItemButton kivy.uix.listview.ListItemButton

#:import ListAdapter kivy.adapters.listadapter.ListAdapter


<ListViewModal>:

    ListView:

        size_hint: .8, .8

        adapter:

            ListAdapter(data=["Item #{0}".format(i) for i in range(100)], cls = ListItemButton)

""")


查看完整回答
反对 回复 2021-04-01
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

我不确定这个答案,但您没有在此adapter属性中添加任何内容。尝试这个:


Builder.load_string("""

#:import ListItemButton kivy.uix.listview

#:import ListAdapter kivy.adapters.listadapter


<ListViewModal>:

    size_hint: None, None

    size: 400, 400

    ListView:

        size_hint: .8, .8

        adapter:

            ListAdapter.ListAdapter:

                data: ["Item #{0}".format(i) for i in range(100)]

                cls: ListItemButton.ListItemButton

""")

我同意sla.ListAdapter不清楚。通常我们可以直接访问该类。告诉我这是否有效:


Builder.load_string("""

#:import ListItemButton kivy.uix.listview.ListItemButton

#:import ListAdapter kivy.adapters.listadapter.ListAdapter


<ListViewModal>:

    size_hint: None, None

    size: 400, 400

    ListView:

        size_hint: .8, .8

        adapter:

            ListAdapter:

                data: ["Item #{0}".format(i) for i in range(100)]

                cls: ListItemButton

""")

请注意,我更改了ListItemButton和的导入ListAdapter。


查看完整回答
反对 回复 2021-04-01
  • 3 回答
  • 0 关注
  • 236 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信