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