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。果然不出所料,修改代码之后可以正常更新。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容