用pygtk进行窗口管理

时间:2010-01-10 09:10:26

标签: gtk pygtk glade gtkbuilder

我遇到了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不知道如何破坏它们,但我不确定。

感谢您的帮助。

2 个答案:

答案 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。