I have widget with some labels placed grid-like. Code:
def init_drawers(self):
self.drawers_widget = QWidget(self)
width, height = self.get_drawers_size() # ex.: 12, 8
self.drawers_widget.setGeometry(100, 0, width * 32, height * 32)
for h in range(height):
for w in range(width):
drawer_uid = f"{h}_{w}"
label = QLabel(self.drawers_widget)
label.setGeometry(w * 32, h * 32, 32, 32)
label.mousePressEvent = self.get_generic_clicker(drawer_uid)
self.bindings[drawer_uid] = (h, w) # {}
self.drawers[drawer_uid] = label # {}
self.render_all()
render_all
just iterates over self.drawers
and sets 32x32 pixmaps for them, so in result I get big image with clickable fields that change their pixmap on click.
At first everything works fine, but then I need to change layout to, for example, 9*9. I tried to delete labels:
if self.drawers:
for k in self.drawers:
self.drawers[k].close() # or .deleteLater()
self.drawers.clear()
self.bindings.clear()
And call init_drawers
again (drawers_widget
init was out of that function). Main widget resized, but no labels seen - and also they're not responding to clicks.
While using .destroy()
instead - click events print new ids, but pixmaps do not update. Also tried to delete drawers_widget
too and create it again - same result.
UPD: I get no errors in console.