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

标签 python gtk pygtk glade gtkbuilder

我正在更新一些代码,从使用 libglade 到 GtkBuilder,这应该是 future 的方式。

使用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 <http://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 - pygtk gtk.Builder.connect_signals 到多个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4637792/

相关文章:

python - 如何在 Tkinter 窗口中获取/打印每秒更新时间

php - 测试 100 多个域的最快方法

python - 导入错误 : No module named gtk

.net - 如何删除 GTK# 窗口的任务栏条目?

python - pygtk:确定键是修饰符

Python 调用 metpy.calc.lfc() 引发 IndexError : index 0 is out of bounds for axis 0 with size 0

python - 默认为 Chrome 时如何在 Python 中打开一个新的默认浏览器窗口

linux - 如何让webkit知道libflashplayer.so的路径,然后使用呢?

python - PyGTK如何单击按钮并在弹出窗口中打开文件

python - 通过使用鼠标调整对话框大小来调整子窗口小部件的大小