【发布时间】:2012-04-18 22:19:20
【问题描述】:
我有一个笔记本,其中包含带有标签的页面,其中有关闭按钮。当您单击按钮时,该选项卡中的页面将从笔记本中删除(关闭)。 问题是当标签页关闭时,内存永远不会被释放,因为似乎还有东西在引用被破坏的页面。
这是我笔记本的一些示例代码:
notebook = gtk.Notebook
def create_tab():
page = gtk.Label( "THis is a page")
page.show()
tab = gtk.HBox()#The custom tab-label widget
tab_label = gtk.Label( "Tab")
tab_label.show()
tab.pack_start( tab_label)
tab_close = gtk.Button()
tab_close.set_image(gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU))
tab_close.connect( 'clicked', destroy_tab, page )
tab_close.show()
tab.pack_end( tab_close)
tab.show()
notebook.append_page(page, tab)
def destroy_tab( widget, data=None):
page_num = notebook.page_num( data )
notebook.remove_page( page_num )
data.destroy()
create_tab
函数是添加到按钮单击信号的回调,因此我可以向笔记本添加任意数量的页面。但是当页面从笔记本中移除时,通过destroy_tab
回调,页面成功从笔记本中移除,但内存从未释放。
这个link 概述了我遇到的同样问题。它暗示的一件事是,仍然存在通过设置为 tab_label 的自定义小部件对页面的引用。我也尝试过销毁自定义小部件,甚至递归地销毁其所有子小部件,但似乎仍然无法弄清楚仍然引用此页面以将其保存在内存中的内容。可能是什么问题?
【问题讨论】: