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

2023-12-27

我有一个glade gui,我也想使用glade 文件插入另一个对象。

当我按照下面的方式执行此操作时(这本质上就是我正在做的事情),整个应用程序挂起,self.show() 并将 CPU 最大化至 100%。如果我替换一个的第一行init() 和 self.builder = gtk.Builder() 然后应用程序运行,我可以设置小部件,即:设置条目的内容,设置和更改组合框的值。但我无法响应信号,按钮单击永远不会调用处理程序。

在实际代码中,对象二被设置为笔记本中的页面,并且我有多个其他页面,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类中,您加载了一个空地文件,但您从未对其小部件执行任何操作。像这样的东西应该有效:

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)

欲了解更多信息,请查看这些林间空地教程 http://live.gnome.org/Glade/Tutorials.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gtk.Builder() 和多个空地文件中断 的相关文章

随机推荐