Skip to main content
 首页 » 编程设计

python之gtk.Builder() 和多个空地文件中断

2024年09月03日30JeffreyZhao

我有一个 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 .