If self.pages is a list model of Gtk.StackPage instances in stack1 then it’s not safe to remove items while iterating over a list.
You have to collect all pages into a separate list, and then remove them:
def delete_pages(self):
pages = [self.get_page_id(x) for x in self.pages]
for page_id in pages:
w = self.stack1.get_child_by_name(page_id)
self.stack1.remove(w)
OK, so I’m quite sure it’s the same issue I reported.
There is a fix under review, may take a little bit of time till it gets reviewed/integrated/released…
In the meantime, you could tweak your code to keep a reference to the page, to avoid the use-after-free crash.
Maybe something like this should be enough:
for page in self.pages:
page_id = self.get_page_id(page)
page_child = self.stack1.get_child_by_name(page_id)
self.stack1.remove(page_child)
page # does nothing, just here to keep an active reference during remove()
Ah OK, thanks, I see, I thought self.pages was a list model of Gtk.StackPages…
Can you please try this?
for page in self.pages:
page_id = self.get_page_id(page)
page_child = self.stack1.get_child_by_name(page_id)
stackpage = self.stack1.get_page(page_child)
self.stack1.remove(page_child)
stackpage # does nothing, just used to keep an active reference during remove()