首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过ScreenManager在kv语言上使用Kivy的RecycleView?

如何通过ScreenManager在kv语言上使用Kivy的RecycleView?
EN

Stack Overflow用户
提问于 2018-09-11 08:37:10
回答 1查看 2K关注 0票数 2

我有一个火库的谷歌工作得很好,我可以很容易地保存我的数据。我想为我的应用程序返回这些数据,但在遇到问题之前,我不能在Kivy上列出任何东西。

我想使用Kivy的ListView,但在文档中建议使用RecycleView。但是我看不懂文档。我有一些疑问。

如果您能够阅读RecycleView的文档,您将看到以下示例:

代码语言:javascript
复制
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',就像这个文档示例:

代码语言:javascript
复制
# 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来返回列表中的数据。

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

代码语言:javascript
复制
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

代码语言:javascript
复制
<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'

ListaEventos:

代码语言:javascript
复制
class ListaEvento(Screen, RecycleView):
    def __init__(self, **kwargs):
        super(ListaEvento, self).__init__(**kwargs)
        self.data = [{'text': str(x)} for x in range(20)] 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-11 09:40:29

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

因此,要解决您的问题,使用继承而不是组合是不正确的,也就是说,将RecyclerView添加为屏幕的儿子。

*.py

代码语言:javascript
复制
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

代码语言:javascript
复制
<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'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52267177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档