未知 class 错误,即使 class 已定义 Kivy/recycle 查看

Unknown class error even if class is defined Kivy/recycle view

我的 design.kv 文件中有这个片段:

<Track>:
    on_release:
        root.print_data(self.text)

RecycleView:
    viewclass: 'Track'
    RecycleGridLayout:
        cols: 1
        default_size_hint: 1, None
        orientation: 'vertical'

然而 returns 一个错误:

class 'Track 的定义如上面的代码片段以及我的 python 代码中所示。

我尝试将视图class设置为'Button',它起作用了,但它只是返回了一个不是预期行为的按钮。

我在这里弄错了什么? 谢谢:)

我的 python 和 kivy 文件的全部代码就在这里:https://github.com/Jezrianne/ANTS

以防错误不是来自上面的代码片段:)

根小部件 - 屏幕

以下示例说明了使用 Screen 小部件作为根小部件并与 RecycleView 小部件结合使用。

main.py

from kivy.app import App
from kivy.uix.recycleview.views import RecycleDataViewBehavior
from kivy.uix.recyclegridlayout import RecycleGridLayout
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.recycleview.layout import LayoutSelectionBehavior
from kivy.uix.button import Button
from kivy.uix.screenmanager import Screen
from kivy.lang import Builder


Builder.load_string('''
#:kivy 1.11.0

<Track>:
    on_release:
        root.print_data(self.text)

<RootWidget>:
    RecycleView:
        id: rv
        viewclass: 'Track'
        SelectableRecycleGridLayout:
            cols: 1
            default_size: None, dp(56)
            default_size_hint: 1, None
            size_hint_y: None
            height: self.minimum_height
            orientation: 'vertical'
            multiselect: True
            touch_multiselect: True
''')


class Track(RecycleDataViewBehavior, Button):

    def print_data(self, text):
        print("\nprint_data: text=", text)


class SelectableRecycleGridLayout(FocusBehavior, LayoutSelectionBehavior,
                                  RecycleGridLayout):
    ''' Adds selection and focus behaviour to the view. '''


class RootWidget(Screen):
    def __init__(self, **kwargs):
        super(RootWidget, self).__init__(**kwargs)
        self.ids.rv.data = [{'text': str(x)} for x in range(100)]


class TestApp(App):
    def build(self):
        return RootWidget()


if __name__ == '__main__':
    TestApp().run()

根小部件 - RecycleView

GridLayout 没有属性,orientation:。请将其从您的 kv 文件中删除。

您需要执行以下操作:

片段

class Track(RecycleDataViewBehavior, Button):

    def print_data(self, text):
        print("\nprint_data: text=", text)


class SelectableRecycleGridLayout(FocusBehavior, LayoutSelectionBehavior,
                                  RecycleGridLayout):
    ''' Adds selection and focus behaviour to the view. '''

例子

main.py

from kivy.app import App
from kivy.uix.recycleview import RecycleView
from kivy.uix.recycleview.views import RecycleDataViewBehavior
from kivy.uix.recyclegridlayout import RecycleGridLayout
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.recycleview.layout import LayoutSelectionBehavior
from kivy.uix.button import Button


class Track(RecycleDataViewBehavior, Button):

    def print_data(self, text):
        print("\nprint_data: text=", text)


class SelectableRecycleGridLayout(FocusBehavior, LayoutSelectionBehavior,
                                  RecycleGridLayout):
    ''' Adds selection and focus behaviour to the view. '''


class RV(RecycleView):
    def __init__(self, **kwargs):
        super(RV, self).__init__(**kwargs)
        self.data = [{'text': str(x)} for x in range(100)]


class TestApp(App):
    def build(self):
        return RV()

if __name__ == '__main__':
    TestApp().run()

test.kv

#:kivy 1.11.0

<Track>:
    on_release:
        root.print_data(self.text)

<RV>:
    viewclass: 'Track'
    SelectableRecycleGridLayout:
        cols: 1
        default_size: None, dp(56)
        default_size_hint: 1, None
        size_hint_y: None
        height: self.minimum_height
        orientation: 'vertical'
        multiselect: True
        touch_multiselect: True

输出