【问题标题】:Spinner at bottom of recyleview in kivy and kivymdkivy 和 kivymd 中 recyleview 底部的微调器
【发布时间】:2022-07-21 23:49:04
【问题描述】:

我希望用户在到达 Recycleview 底部时看到微调器。 在下面的代码中,微调器在视口中可见,这是问题所在,所以下面有一些代码..

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.recycleview import RecycleView
from kivy.uix.scrollview import ScrollView
from kivy.uix.screenmanager import Screen

Builder.load_string('''
<MyScreen>:
    ScrollView:
        BoxLayout:
            orientation:"vertical"
            size_hint_y:None
            height:root.height
            RV:
                size_hint_y:None
                height:root.height
                viewclass: 'Button'
                RecycleBoxLayout:
                    default_size: None, dp(56)
                    default_size_hint: 1, None
                    size_hint_y: None
                    height: self.minimum_height
                    orientation: 'vertical'
                    size_hint_y:None
                    height:self.minimum_height
            MDSpinner:
                size_hint:None,None
                width:dp(40)
                height:dp(20)
                pos_hint:{"center_x":.5}
                
    

''')

class MyScreen(Screen):
    pass


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


class TestApp(MDApp):
    def build(self):
        return MyScreen()

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

提前谢谢..

【问题讨论】:

    标签: python kivy kivymd


    【解决方案1】:

    如果您希望RecycleView 中的最后一项成为微调器,则不能使用Button 中的viewclass 来实现(除非您可以使Button 看起来像Spinner)。但是,您可以设计自己的viewclass,看起来像ButtonSpinner。所以像这样定义一个自定义的viewclass

    class MyViewClass(RelativeLayout):
        text = StringProperty('')  # text for the Button
        spinner = BooleanProperty(False)  # if True, show a Spinner instead
    

    然后在您的kv 中为其添加规则:

    <MyViewClass>:
        Button:
            text: root.text
            opacity: 0 if root.spinner else 1
        MDSpinner:
            pos_hint:{"center_x":.5}
            opacity: 1 if root.spinner else 0
            active: True if root.spinner else False
            size_hint: None, None
            height: root.height
            width: root.height
    

    上述规则使用opacity 来确定@​​987654334@ 或Spinner 是否可见。而MDSpinneractive 属性用于避免在不可见的项目中运行MDSpinner

    然后只需将MyViewClass 指定为viewclass

    viewclass: 'MyViewClass'
    

    并从您的kv 中删除旧的MDSpinner

    最后要做的就是调整你的data

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

    数据现在将所有条目的spinner 设置为False,并添加了一个额外的条目,其中spinner 设置为True

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      相关资源
      最近更新 更多