PyQt中QScrollArea中组件更新后空白的解决办法

有一个需求是 QScrollArea中的组件需要动态添加或删除,比如懒加载的图片列表。

但是在实现的过程中只有第一次请求能够成功添加组件,当对 QScrollArea中的组件进行更新时 QScrollArea中的组件就会消失。

这个问题困扰了我很久,仔细查看了官方文档之后发现下面这段话:

PySide2.QtWidgets.QScrollArea.setWidget(widget)

Note that You must add the layout of widget before you call this function; if you add it later, the widget will not be visible - regardless of when you show() the scroll area. In this case, you can also not show() the widget later.

上面这段话的大概意思是:在调用 QScrollArea.setWidget之前必须设置 widget的 layout,在调用了 QScrollArea.setWidget之后再设置 widget的 layout的话 widget就会隐藏。

虽然这里在调用 QScrollArea.setWidget之前就设置了 widget的 layout,但是我推测可能调用了 QScrollArea.setWidget之后更新 widget也会导致组件隐藏。

基于上面的分析,既然不能更新 widget,那我们就在每次需要更新 widget时重新创建一个 QWidget,再调用 QScrollArea.setWidget函数设置新的 widget。果然不出所料,修改代码之后可以正常更新。

如果你不是在看到这篇文章,请移步支持原作者

你可能感兴趣的:(PyQt中QScrollArea中组件更新后空白的解决办法)