【问题标题】:How can I use the RecycleView of Kivy on kv language with ScreenManager?如何通过 ScreenManager 在 kv 语言上使用 Kivy 的 RecycleView?
【发布时间】:2018-09-11 00:37:09
【问题描述】:

我在 Google 的 Firebase 上有一个运行良好的数据库,我可以轻松地将我的数据保存在那里。我想为我的应用返回这些数据,但在我遇到问题之前,我无法在 Kivy 上列出任何内容。

我想用Kivy的ListView,但是在文档中推荐使用RecycleView。但我无法理解文档。我有一些疑问。

如果您可以阅读RecycleView 的文档,您会看到以下示例:

Builder.load_string('''
<RV>:
    viewclass: 'Label'
    RecycleBoxLayout:
        default_size: None, dp(56)
        default_size_hint: 1, None
        size_hint_y: None
        height: self.minimum_height
        orientation: 'vertical'
''')

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

但我使用 ScreenManager 来控制我的屏幕,然后,在 TestApp 类中我返回“sm”,就像这个文档示例一样:

# Declare both screens
class MenuScreen(Screen):
    pass

class SettingsScreen(Screen):
    pass

# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))

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

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

如果您看到语法不同,而我不知道如何编码。我想继续使用 ScreenManager 来控制屏幕并使用 RecycleView 在列表中返回我的数据。

如何将 RecycleView 与 ScreenManager 一起使用?这是我的 main.py,我在另一个文档中配置屏幕,我也使用 ki 语言。因此,如果你们都可以为我做一个例子,我将不胜感激。

import kivy
from kivy.app import App, Builder
from kivy.config import Config
from kivy.uix.screenmanager import ScreenManager
from telas.telas import Acesso, Comprando, Vendendo, CadastrarEvento


kivy.require('1.10.1')
Builder.load_file('ing.kv')
Config.read('config.ini')
sm = ScreenManager()

sm.add_widget(Acesso(name='acesso'))
sm.add_widget(Comprando(name='comprando'))
sm.add_widget(Vendendo(name='vendendo'))
sm.add_widget(CadastrarEvento(name='cadastrarEvento'))
sm.add_widget(ListaEventos(name='listaEventos'))

class IngApp(App):
    def build(self):
        return sm

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

这是我第一次尝试的kv

<ListaEventos>:
    canvas:
        Rectangle:
            source: 'design/fundo.png'
            size: self.width, self.height    


    viewclass: 'Label'
    RecycleBoxLayout:
        default_size: None, dp(56)
        default_size_hint: 1, None
        size_hint_y: None
        height: self.minimum_height
        orientation: 'vertical'

列表事件:

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

【问题讨论】:

  • 显示你的 .kv....
  • 好吧,我还没有这个kv
  • 为什么你没有尝试任何东西?那个屏幕会成为 RecyclerView 吗? RecyclerView 中会显示哪些数据?示例中是否会使用相同的数据?
  • 但我试过了。我也不能使用这个例子,所以我想从这个开始(文档的例子)。将来,我想显示我的 Firebase 的数据,比如一两个字段,带有名称和日期,例如
  • 我在想 RecyclerViews 是一个小部件,就像按钮一样,我可以在我的屏幕上使用它

标签: python kivy


【解决方案1】:

您不应该从 2 个小部件继承,而是要绘制哪个小部件?例如,如果您想要一个行为类似于按钮的图像,则必须从 Image 小部件和 ButtonBehavior 类继承,即在视觉上它是图像但添加了按钮行为。

所以要解决你的问题,使用继承而不是组合是不正确的,即将RecyclerView添加为Screen的儿子。

*.py

import kivy
from kivy.app import App, Builder
from kivy.config import Config
from kivy.uix.screenmanager import ScreenManager, Screen

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


kivy.require('1.10.1')
Builder.load_file('ing.kv')
Config.read('config.ini')

sm = ScreenManager()
sm.add_widget(ListaEventos(name='listaEventos'))


class IngApp(App):
    def build(self):
        return sm


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

ing.kv

<ListaEventos>:
    rv: rv # expose the widget

    canvas:
        Rectangle:
            source: 'design/fundo.png'
            size: self.width, self.height

    RecycleView:
        id: rv
        viewclass: 'Label'
        RecycleBoxLayout:
            default_size: None, dp(56)
            default_size_hint: 1, None
            size_hint_y: None
            height: self.minimum_height
            orientation: 'vertical'

【讨论】:

  • 非常感谢!!你帮了我很多。对错误深表歉意,再次感谢您的关注。这正是我想要的,现在我将去做其他事情。 :D
  • 非常感谢。真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
相关资源
最近更新 更多