python - 删除容器是否会破坏 GTK 内存中的内部小部件

标签 python gtk3

我正在使用 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/

相关文章:

python - 如何覆盖 readthedocs 上的模板?

python - python属性文档字符串是否常用?

c - 使用 libgda-ui 调用 row-activated

c++ - Gtk::Main 和 Gtk::Application::create 之间有什么区别?

css - Evince 中的 GTK+ 插入符号颜色 CSS 属性

c - 信息栏仅在窗口更改时显示

python - 流: How to distribute reinforcement vehicles (RL) vehicles uniformly?

python - 当有很多选择时如何提高我的 pandas 效率

python - 在pycharm中安装csv包

c - GTK 窗口中的 Gstreamer 视频