我正在使用GTK3在python中执行一个程序.我需要根据用户的需要更改GUI界面.如果我有一个窗口,我已经添加了一个Gtk.Box,然后在框中添加类似标签和文本条目的东西,然后当需要更改界面时,删除Box,是否删除标签和文本条目在记忆中?我对Python最感兴趣,但也想学习C语言.C的答案有何不同?
如果它不会自动销毁Gtk.Box,那么这意味着要保持对框中每个小部件的持续跟踪,并且需要为每个小部件调用widget.destroy().似乎有点浪费.
谢谢,
Narnie
>>> 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()
Run Code Online (Sandbox Code Playgroud)
vbox.destroy()是否也会破坏标签对象?
当您销毁容器时,内部的小部件会减少其引用计数.如果窗口小部件的引用计数降为零,则会将其销毁.因此,如果您没有在代码中保留任何额外的引用,则在销毁容器时将销毁小部件.
在C中,你是否持有一个参考,从来没有任何问题; 如果您创建了窗口小部件并且尚未将其添加到容器中,或者g_object_ref()在窗口小部件上调用,则您有一个引用.如果没有,不是.
在Python中,事情变得更复杂.如果窗口小部件绑定到Python解释器中的名称,则可能添加了额外的引用.如果你是在像IPython这样的解释器中以交互方式做事情,它会跟踪旧输入,那么可能有几个引用.但是你不需要在Python中担心这个问题; 当对象不再可访问时,垃圾收集器将删除引用,即使在销毁容器时它没有被销毁.
| 归档时间: |
|
| 查看次数: |
1729 次 |
| 最近记录: |