我遇到了PyGTK和GTK Builder窗口的问题。这是我的代码的简化版本。
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构建器文件只包含一个顶层窗口,其中包含一个水平打包框,并指向destroy的信号。这似乎工作,窗口创建和填充就好了,但如果我试图破坏已填充任何其他小部件python segfaults的窗口。
我认为这是包装不在构建器文件中的新小部件的一些问题,因此pygtk不知道如何破坏它们,但我不确定。
感谢您的帮助。
答案 0 :(得分:1)
使用gtk.main_quit()
。
def on_destroy(self): gtk.main_quit()
答案 1 :(得分:0)
当窗口尚未销毁时,将调用您的“destroy”处理程序,因此此代码片段为:
def on_destroy(self):
self.window.destroy()
将生成无限递归调用。换句话说,你正在摧毁尚未被摧毁的东西。
这与GtkBuilder或手工编写的小部件无关,但我怀疑我遗漏了一些东西,因为我不知道你为什么需要连接到GtkWindow :: destroy。