gtk.Builder()和多个glade文件中断 [英] gtk.Builder() and multiple glade files breaks

查看:175
本文介绍了gtk.Builder()和多个glade文件中断的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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 self.builder = gtk.Builder()应用程序运行,但小部件信号丢失。
self.builder.add_from_file(ui_for_one.glade)
self.show()#这里有无尽的循环吗?

class two(object):#这是笔记本中的页面。
def __init __(self):
self.builder = gtk.Builder()
self.builder.add_from_file(ui_for_two.glade)
self.some_container = self.builder (self.one,False,False)


解决方案

使用相同的 gtk.Builder 两个类中的对象?

这可能是您的问题的原因。在你的一个类中,你加载了一个glade文件,但你从来没有对它的小部件做任何事情。像这样的应该工作:

$ p $ class 1(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)
#没有理由在这里调用self.show(),这应该是手动完成。

#您的回调函数在这里

class two(object):#这是笔记本中的页面。

def __init __(self):
self.builder = gtk.Builder()
self.builder.add_from_file(ui_for_two.glade)
self.some_container (self.one,False,False)
self.some_container.show_all(self.one, )#递归地显示some_container及其所有子窗口小部件

self.builder.connect_signals(self)

有关更多信息,请查看这些 Glade教程


I have a glade gui, and I want to insert another object using a glade file as well.

When I do it as bellow (this is essentially what I am doing) the whole app hangs and the self.show() and maxes out the CPU at 100%. If I replace the first line of one's init() with self.builder = gtk.Builder() then the app runs, I can set widgets, ie: set contents of entry's, set and change the values of comboboxes. But I cant respond to signals, button clicks never call the handler.

In the real code the object two is set as a page in a note book, and I have multiple other pages, the gtk.main() is in the object that owns the notebook. All these work as expected, it's just the object one that fails.

Any clues? I have tried calling self.builder.connect_signals() for every widget but it still fails to notice them.

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)

解决方案

Is there a good reason for using the same gtk.Builder object in two classes?
This might be the cause of your problem. In your one class, you load a glade file but you never do anything with its widgets. Something like this should work:

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)

For more info, check out these Glade tutorials.

这篇关于gtk.Builder()和多个glade文件中断的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆