【问题标题】:How to remove empty space of widget removed?如何删除已删除的小部件的空白空间?
【发布时间】:2021-08-09 22:18:57
【问题描述】:

我有一个运行良好的代码,但有一个问题。用户单击“删除”图标后,小部件正在删除,并且该小部件之后有空白空间。 如何删除空白空间?我真的无法理解如何解决它。

from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.list import OneLineIconListItem
from kivy.properties import StringProperty

KV = '''
<RVItem>
    IconLeftWidget:
        icon: 'delete'
        del_id: root.del_id
        on_release: app.delete(self)

Screen:
    rv: rv
    RecycleView:
        id: rv
        viewclass: 'RVItem'
        do_scroll_x: False
        RecycleBoxLayout:
            orientation: 'vertical'
            size_hint_y: None
            size: self.minimum_size
            default_size: None, dp(56)
            default_size_hint: 1, None

'''

class RVItem(OneLineIconListItem):
    del_id = StringProperty()

class MainApp(MDApp):
    def build(self):
        return Builder.load_string(KV)

    def on_start(self):
        self.root.rv.data = [{'text': str(x), 'del_id': str(x)} for x in range(10)]
    
    def delete(self, instance):
        for item in self.root.children[0].children[0].children:
            if item.text == instance.del_id:
                self.root.children[0].children[0].remove_widget(item)

MainApp().run()

【问题讨论】:

    标签: python kivy kivymd


    【解决方案1】:

    RecycleView 是基于它的data,因此删除它的一个子小部件实际上不会产生任何影响,只是暂时消失了那个小部件(它会在您滚动时重新出现)。要真正从RecycleView 中删除项目,您必须从data 中删除它尝试修改您的delete() 方法来执行此操作:

    def delete(self, instance):
        for item in self.root.rv.data:
            if item['del_id'] == instance.del_id:
                self.root.rv.data.remove(item)
                return
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      相关资源
      最近更新 更多