gtk.Builder() 和多个空地文件中断
我有一个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)
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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在两个类中使用相同的
gtk.Builder
对象是否有充分的理由?这可能是您的问题的原因。在您的
one
类中,您加载了一个空地文件,但您从未对其小部件执行任何操作。像这样的东西应该有效:有关更多信息,请查看这些Glade 教程。
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:For more info, check out these Glade tutorials.