0

我遇到了 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 构建器文件只包含一个带有水平包装盒的顶层窗口和销毁的信号。这似乎工作并且窗口被创建和填充得很好,但是如果我尝试破坏已经填充了任何其他小部件python segfaults的窗口。

我认为这是打包不在构建器文件中的新小部件的一些问题,因此 pygtk 不知道如何破坏它们,但我不确定。

谢谢你的帮助。

4

2 回答 2

1

使用gtk.main_quit().

def on_destroy(自我):
    gtk.main_quit()
于 2010-01-23T18:42:42.333 回答
0

当窗口尚未销毁时,您的“销毁”处理程序会被调用,因此此代码片段:

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

将产生无限递归调用。换句话说,你正在摧毁一些尚未被摧毁的东西。

这与 GtkBuilder 或手动编码的小部件无关,但我怀疑我遗漏了一些东西,因为我不知道为什么需要将某些东西连接到 GtkWindow::destroy。

于 2010-01-10T22:11:38.807 回答