我有一个glade gui,我也希望使用glade文件插入另一个对象。
当我这样做时(这基本上就是我正在做的)整个应用程序挂起并且self.show()并将CPU最大化为100%。如果我用self.builder = gtk.Builder()替换一个人的 init ()的第一行然后应用程序运行,我可以设置小部件,即:设置条目的内容,设置和更改值组合框。但我无法回应信号,按钮点击从不调用处理程序。
在实际代码中,对象2被设置为笔记本中的页面,并且我有多个其他页面,gtk.main()位于拥有笔记本的对象中。所有这些都按预期工作,它只是失败的对象。
任何线索?我试过为每个小部件调用self.builder.connect_signals()但它仍然没有注意到它们。
class one(gtk.VBox):
def __init__(self, builder):
gtk.VBox.__init__(self)
self.builder = builder # if this is self.builder = gtk.Builder() app runs but widget signals go missing.
self.builder.add_from_file("ui_for_one.glade")
self.show() # Endless loop here?
class two(object): # This is the page in a notebook.
def __init__(self):
self.builder = gtk.Builder()
self.builder.add_from_file("ui_for_two.glade")
self.some_container = self.builder.get_object("some_container")
self.one = one(self.builder)
self.some_container.pack_start(self.one, False, False)
答案 0 :(得分:3)
在两个类中使用相同的gtk.Builder
对象是否有充分的理由?
这可能是您的问题的原因。在one
类中,您加载了一个glade文件,但是您从不对其小部件执行任何操作。这样的事情应该有效:
class one(gtk.VBox):
def __init__(self):
gtk.VBox.__init__(self)
self.builder = gtk.Builder()
self.builder.add_from_file("ui_for_one.glade")
some_widget = self.builder.get_object("some_widget")
self.add(some_widget)
self.builder.connect_signals(self)
# No reason to call self.show() here, that should be done manually.
#Your callback functions here
class two(object): # This is the page in a notebook.
def __init__(self):
self.builder = gtk.Builder()
self.builder.add_from_file("ui_for_two.glade")
self.some_container = self.builder.get_object("some_container")
self.one = one()
self.some_container.pack_start(self.one, False, False)
self.some_container.show_all() #recursively show some_container and all its child widgets
self.builder.connect_signals(self)
有关详细信息,请查看这些Glade tutorials。