需要使用替代签名实例化时如何扩展 PyGobject class?
How do I extend PyGobject class when needing to instantiate with alternative signature?
我在项目中使用 Gtk.TextView,我需要更改实例化对象的方式,以便我可以在 TextView 中包含自定义 TextBuffer。
目前我的相关代码是:
# Relevant code only
class EditBox(Gtk.TextView):
__gsignals__ = {
# some signals
}
def __init__(self):
super().__init__()
这个 class 到目前为止实例化和工作完美。我想要进行的更改需要使用 new_with_buffer
签名,如 here 所述。简单地向 super 语句传入缓冲区并不能解决问题,instantiating/calling a super.add_with_buffer() 也会导致错误。
我需要能够扩展我的 EditBox,以便我可以使用父级中的 new_with_buffer
方法实例化它,或者能够以正确实例化的方式超级化这是。进行此更改后,我不需要能够在没有缓冲区的情况下进行实例化。
我可以使用 new_with_new
方法实例化 TextView 本身,并将其传递到缓冲区中,但我似乎无法弄清楚如何以这种方式扩展 TextView class我可以将缓冲区传递到我自己的扩展 class 并将其传递给父级。
这是怎么做到的?
将 kwargs
传递给超类构造函数并将 buffer
属性 作为参数传递给构造函数与使用 new_with_buffer
的效果相同。 new_with_buffer
可能仅作为 C 程序员的便利函数存在。
使用基于 PyGObject 的绑定,you can pass properties 到将用于初始化它们的构造函数。
class EditBox(Gtk.TextView):
…
def __init__(self, **kwargs):
super().__init__(**kwargs)
# do extra stuff
my_edit_box = EditBox(buffer=my_shared_buffer)
我在项目中使用 Gtk.TextView,我需要更改实例化对象的方式,以便我可以在 TextView 中包含自定义 TextBuffer。
目前我的相关代码是:
# Relevant code only
class EditBox(Gtk.TextView):
__gsignals__ = {
# some signals
}
def __init__(self):
super().__init__()
这个 class 到目前为止实例化和工作完美。我想要进行的更改需要使用 new_with_buffer
签名,如 here 所述。简单地向 super 语句传入缓冲区并不能解决问题,instantiating/calling a super.add_with_buffer() 也会导致错误。
我需要能够扩展我的 EditBox,以便我可以使用父级中的 new_with_buffer
方法实例化它,或者能够以正确实例化的方式超级化这是。进行此更改后,我不需要能够在没有缓冲区的情况下进行实例化。
我可以使用 new_with_new
方法实例化 TextView 本身,并将其传递到缓冲区中,但我似乎无法弄清楚如何以这种方式扩展 TextView class我可以将缓冲区传递到我自己的扩展 class 并将其传递给父级。
这是怎么做到的?
将 kwargs
传递给超类构造函数并将 buffer
属性 作为参数传递给构造函数与使用 new_with_buffer
的效果相同。 new_with_buffer
可能仅作为 C 程序员的便利函数存在。
使用基于 PyGObject 的绑定,you can pass properties 到将用于初始化它们的构造函数。
class EditBox(Gtk.TextView):
…
def __init__(self, **kwargs):
super().__init__(**kwargs)
# do extra stuff
my_edit_box = EditBox(buffer=my_shared_buffer)