我有一个 glade gui,我也想使用 glade 文件插入另一个对象。
当我按照下面的方式执行时(这基本上就是我正在做的)整个应用程序挂起并且 self.show() 并以 100% 的速度最大化 CPU。如果我用 self.builder = gtk.Builder() 替换一个人的第一行 init() 然后应用程序运行,我可以设置小部件,即:设置条目的内容,设置和更改值组合框。但我无法响应信号,按钮点击永远不会调用处理程序。
在实际代码中,对象二被设置为笔记本中的一页,我还有多个其他页面,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)
请您参考如下方法:
在两个类中使用相同的 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 .
