2010-01-10 2 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 빌더 파일은 수평 포장 상자가있는 최상위 창과 파괴 신호를 포함합니다. 이것은 작동하는 것으로 보입니다. 그리고 윈도우가 생성되고 잘 채워지지만 다른 위젯으로 채워진 창을 파괴하려고하면 파이썬 segfaults가 발생합니다.

나는 이것이 빌더 파일에없는 새로운 위젯을 포장 할 때 어떤 문제가 있다고 생각하여 pygtk는 파일을 파괴하는 방법을 모르지만 확실하지는 않습니다.

도움 주셔서 감사합니다.

답변

0

귀하의 윈도우가 파괴 아직 때 핸들러가 호출 "파괴"그래서이 코드 조각 :

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

무한 재귀 호출을 생성합니다. 다른 말로, 당신은 아직 파괴되고있는 것을 파괴하고 있습니다.

이것은 GtkBuilder 또는 손으로 코딩 된 위젯과는 아무런 관련이 없지만 GtkWindow :: destroy에 연결해야하는 이유가 무엇인지 모르기 때문에 뭔가 빠졌다고 생각됩니다.

1

gtk.main_quit()을 사용하십시오.

def on_destroy(self): 
    gtk.main_quit()