I'm looking for a way to remove a widget from its parent (whatever that may be - a VBox, a Grid, ...) and add a substitute widget in its place.
I found this answer, but I can't seem to make it work with Gtk3.
Here's what I tried:
from gi.repository import Gtk
def replace_widget(old, new):
parent= old.get_parent()
props= {}
for key in Gtk.ContainerClass.list_child_properties(type(parent)):
props[key.name]= parent.child_get_property(old, key.name)
parent.remove(old)
parent.add_with_properties(new, **props)
But the call to Gtk.ContainerClass.list_child_properties
raises
TypeError: argument self: Expected a Gtk.ContainerClass, but got gi.repository.Gtk.GObjectMeta
It won't accept an instance of a container widget either. For the life of me, I can't figure out what parameter I'm supposed to pass.
P.S.: I know I could add another widget between the container and the child widget, but I'd prefer not to.
UPDATE: I guess it wasn't clear enough: The substitute widget is supposed to be in the same place as the original widget, with the same packing properties.