我正在使用 GTK3 在 python 中编写程序。我需要根据用户需要更改 GUI 界面。如果我有一个添加了 Gtk.Box 的窗口,然后在框中放置标签和文本条目之类的东西,然后当需要更改界面时,删除 Box,是否会删除标签和文本条目在内存中?我对 Python 最感兴趣,但也想学习 C。 C 的答案是否不同?
如果它不自动销毁 Gtk.Box,则意味着持续跟踪框中的每个小部件,并且需要为每个小部件调用 widget.destroy()。看起来有点浪费。
谢谢,
纳尼
>>> import gtk
>>> win = gtk.Window()
>>> vbox = gtk.VBox()
>>> win.add(vbox)
>>> label = gtk.Label("Hello, everybody!")
>>> vbox.pack_start(label, True, True, 0)
>>> win.show_all()
>>> vbox.destroy()
vbox.destroy() 是否也销毁标签对象?
最佳答案
当你销毁一个容器时,里面的小部件的引用计数会减少。如果一个小部件的引用计数降为零,它就会被销毁。因此,如果您没有在代码中保留任何额外的引用,则当您销毁容器时,小部件将被销毁。
在 C 中,您是否持有引用从来都不是问题;如果您创建了小部件但尚未将其添加到容器中,或者在小部件上调用了 g_object_ref()
,则您有一个引用。如果没有,就没有。
在 Python 中,事情要复杂得多。如果小部件绑定(bind)到 Python 解释器中的名称,则它可能添加了额外的引用。如果您在像 IPython 这样跟踪旧输入的解释器中交互地做事,那么可能有几个引用。但是在 Python 中你不需要担心这个;当对象不再可访问时,垃圾收集器将删除引用,即使当您销毁容器时它没有被销毁。
关于python - 删除容器是否会破坏 GTK 内存中的内部小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10289171/