我正在寻找一种方法,可以从一个父小部件中移除另一个小部件(无论它是VBox、Grid还是其他),并在原位置添加一个替代小部件。
我找到了这个答案,但似乎无法在Gtk3中使其工作。
以下是我尝试的内容:
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)
但调用 Gtk.ContainerClass.list_child_properties
会引发异常
TypeError: argument self: Expected a Gtk.ContainerClass, but got gi.repository.Gtk.GObjectMeta
它也不会接受容器小部件的实例。我真的想不出我应该传递哪个参数。
附言:我知道我可以在容器和子小部件之间添加另一个小部件,但我宁愿不这样做。
更新:我想可能不够清楚:替代小部件应该与原始小部件处于相同的位置,并具有相同的打包属性。