2

の代わりにListAdapterを使用するようにlist_simple_in_kv.pyを少し変更するとSimpleListAdapter、方法 #1 が機能することがわかります。

from kivy.uix.modalview import ModalView
from kivy.uix.listview import ListView
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
from 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 root

if __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はマスターで機能するはずだと言っていますが、例外が発生します:

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

ここで何が欠けていますか?

前もって感謝します。

4

2 に答える 2

1

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)
""")
于 2013-06-14T04:14:54.547 に答える