编程语言
首页 > 编程语言> > python – pygtk gtk.Builder.connect_signals到多个对象?

python – pygtk gtk.Builder.connect_signals到多个对象?

作者:互联网

我正在使用libglade更新一些代码到GtkBuilder,这应该是未来的方式.

使用gtk.glade,您可以重复调用glade_xml.signal_autoconnect(…)将信号连接到与程序中不同窗口对应的不同类的对象.但是,Builder.connect_signals似乎只工作一次,并且(因此)对任何未在传入的第一个类中定义的处理程序发出警告.

我意识到我可以手动连接它们,但这看起来有点费力. (或者就此而言,我可以使用一些getattr hackery让它通过代理将它们连接到所有对象……)

这是一个错误,没有功能可以跨多个对象连接处理程序?或者我错过了什么?

其他人有一个类似的问题http://www.gtkforums.com/about1514.html,我认为这意味着无法做到这一点.

解决方法:

这就是我现在拥有的.随意使用它,或建议更好的东西:

class HandlerFinder(object):
    """Searches for handler implementations across multiple objects.
    """
    # See <https://stackoverflow.com/questions/4637792> for why this is
    # necessary.

    def __init__(self, backing_objects):
        self.backing_objects = backing_objects

    def __getattr__(self, name):
        for o in self.backing_objects:
            if hasattr(o, name):
                return getattr(o, name)
        else:
            raise AttributeError("%r not found on any of %r"
                % (name, self.backing_objects))

标签:python,gtk,pygtk,glade,gtkbuilder
来源: https://codeday.me/bug/20190721/1496906.html