2010-01-10 65 views
0

我遇到PyGTK和GTK Builder窗口的問題。這是我的代碼的簡化版本。使用pygtk進行窗口管理

class GUI: 
def __init__(self,parent): 
    builder_file = "./ui/window.builder" 
    self.builder = gtk.Builder() 
    self.builder.add_from_file(builder_file) 

    self.window = self.builder.get_object('main') 
    self.builder.connect_signals(self) 
    self.populate_window() 
    self.window.show() 

def populate_window(self): 
    hbox = self.builder.get_object('hbox') 
    hbox.pack_start(somewidgets) 

def on_destroy(self): 
    self.window.destroy() 

gtk構建器文件只包含一個帶有水平包裝框的頂層窗口併發送信號給銷燬。這似乎工作,窗口創建和填充很好,但如果我試圖摧毀已填充任何其他小部件python segfaults窗口。

我在想這是不是包裝新的小部件,而不是在生成器文件中的一些問題,所以pygtk不知道如何去除它們,但我不確定。

感謝您的任何幫助。

回答

0

你「消滅」的時候,窗口尚未銷燬處理程序被調用,所以這個代碼片斷:

def on_destroy(self): 
    self.window.destroy() 

將產生無窮的遞歸調用。換句話說,你正在銷燬一些尚未銷燬的東西。

這與GtkBuilder或手工編碼的小部件無關,但我懷疑我錯過了一些東西,因爲我不知道爲什麼需要將某些東西連接到GtkWindow :: destroy。

1

使用gtk.main_quit()

def on_destroy(self): 
    gtk.main_quit()