【Python学习】takeAt、reversed

在项目中有下面这样的结构,需要动态的加载

所以有彻底删除这部分组件的需求,操作如下:

    def _clear_all_fee_widgets(self):
        """
        清空当前页面内的全部组件
        """
        for i in reversed(range(len(self.fee_group))):
            for j in reversed(range(self.fee_group[i].count())):
                item = self.fee_group[i].takeAt(j)  # takeAt: 移除布局中的组件
                widget = item.widget()
                if widget:
                    widget.deleteLater()
            self.fee_group[i] = None
        self.fee_group = []

其中takeAt、reversed没接触过,所以查了一下用法:


takeAt

takeAt 是 QLayout 类中的一个方法,用于从布局中移除并返回指定索引处的项(QLayoutItem)。这个方法通常用于在迭代过程中动态地修改布局,比如移除布局中的某些组件。

当你调用 takeAt(index) 时:

  • index 是你想要移除的项的索引。索引通常从 0 开始,到布局中项的总数减一。
  • 该方法会移除指定索引处的项,并返回该项的 QLayoutItem 对象。这个 QLayoutItem 对象通常封装了一个控件(如 QWidget)或者另一个布局。
  • 如果移除成功,该项将不再属于该布局,但返回的 QLayoutItem 对象仍然有效,直到你决定删除它或它自己被删除。

重要的是要注意,takeAt 只是从布局中移除了项,但并没有删除该项封装的控件。如果你想要删除控件并释放其占用的内存,你需要调用 deleteLater() 方法(对于 QWidget 及其子类)来在事件循环的下一个迭代中安排删除。


reversed

reversed() 是 Python 的一个内置函数,它接受一个序列(比如列表、元组、字符串或者任何实现了 __reversed__ 方法的对象),并返回一个反向迭代器,用于在循环中反向遍历该序列的元素。使用 reversed() 可以很方便地以相反的顺序访问序列中的元素,而不需要手动地计算索引或者对序列进行切片。

在处理布局中的项时,我们可能需要从后向前迭代以避免因为删除操作而引发的索引问题。如果我们只是简单地从前往后迭代并删除元素,那么在删除一个元素后,所有后续元素的索引都会发生变化。而如果我们从后向前删除,那么删除操作就不会影响尚未处理的元素的索引。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值