Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除容器会破坏GTK内存中的小部件吗_Python_Gtk3 - Fatal编程技术网

Python 删除容器会破坏GTK内存中的小部件吗

Python 删除容器会破坏GTK内存中的小部件吗,python,gtk3,Python,Gtk3,我正在用GTK3用python编写一个程序。我需要根据用户的需要更改GUI界面。如果我有一个窗口,我在其中添加了一个Gtk.Box,然后在框中放入标签和文本条目之类的内容,然后在需要更改界面时删除该框,这会删除内存中的标签和文本条目吗?我对Python最感兴趣,但也想学习C。C的答案不同吗 如果它没有自动销毁Gtk.Box,那就意味着要不断跟踪盒子中的每个小部件,并且需要为每个小部件调用widget.destroy()。看起来有点浪费 谢谢 纳尼 >>> import gtk

我正在用GTK3用python编写一个程序。我需要根据用户的需要更改GUI界面。如果我有一个窗口,我在其中添加了一个Gtk.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\u object\u ref()
,那么您就有了一个引用。如果不是,就不是


在Python中,事情更加复杂。如果小部件绑定到Python解释器中的一个名称,那么它可能会添加一个额外的引用。如果您在像IPython这样的解释器中以交互方式进行操作,它可以跟踪旧的输入,那么可能有几个引用。但在Python中,您不必担心这一点;当对象不再可访问时,垃圾回收器将删除引用,即使在销毁容器时对象没有被销毁。

谢谢,我问的原因是这样的。我正在开发一个GUI,其中的界面根据用户的需要而变化。我将创建和销毁容器,并为接口更改添加一个新容器。我有一个想法,如果用户来回更改很多,如果删除它们的父容器不会破坏它们,那么这可能会在内存中添加很多未使用的对象。我想我已经决定只玩widget.show()/widget.hide()游戏,而不是销毁和重新创建,但我仍然想知道它。@narnie我正在尝试开发一个界面也发生变化的应用程序。你知道怎么做吗?我的意思是vbox.destroy()销毁标签对象而不是vbox对象吗(以上已更正)。