pyqt使用过程中,qgridlayout
deleteLater后,界面会显示一个灰块,ui不会自动重新排版,但是整行删除后,会自动隐藏那一行
但是辨识挑图中,打开图,第一次隐藏不成功,点击别的按钮,再来删除控件就可以了。
打开数据,然后点击下一页,数据也不会清空,如果先点击别的按钮,再点击下一页,就能用了。
点击别的按钮后,deleteLater也管用了。
def open_next(self):
self.key_shift = False
self.key_control = False
self.grid_index_last = -1
# self.will_changes.clear()
self.page_index += 1
self.img_files=[]
for btn in self.dir_btns:
btn.setEnabled(False)
for i in range(self.page_count):
willselect = self.scroll_ares_images.findChild(QClickableImage, "item_" + str(i))
if willselect is None:
print("willselect",i)
continue
else:
self.gridLayout.removeWidget(willselect)
willselect.deleteLater()
willselect.hide()
del willselect
self.gridLayout.invalidate()
print("del------------------")
while self.grid.count():
item = self.grid.takeAt(0)
widget = item.widget()
# if widget has some id attributes you need to
# save in a list to maintain order, you can do that here
# i.e.: aList.append(widget.someId)
widget.deleteLater()
自动替换数据更新ui时,开始用的是遍历添加数据, 后来页数多了,添加空数据时,发现残留之前页面的数据
临时解决方法,根据名称,遍历所有控件,然后删除,再添加新的ui控件,就更新成了新的页面。
参考: