当需要使用替代签名实例化时,如何扩展PyGobject类?

时间:2019-02-21 17:01:13

标签: python-3.x gtk gtk3 pygobject

我正在项目中使用Gtk.TextView,我需要更改实例化对象的方式,以便可以在TextView中包含自定义TextBuffer。

目前我的相关代码是:

# Relevant code only
class EditBox(Gtk.TextView):

    __gsignals__ = {
        # some signals
    }

    def __init__(self):
        super().__init__()

到目前为止,该类实例化并正常运行。我要进行的更改使我需要使用here中所述的new_with_buffer签名。仅仅将缓冲区传递给super语句并不能解决问题,实例化/调用super.add_with_buffer()也会导致错误。

我需要能够以一种可以扩展我的EditBox的方式来扩展它,以便可以使用父级中的new_with_buffer方法来实例化它,或者能够以一种可以以正确的方式正确地实例化它的方式来进行扩展。 。进行此更改后,不需要缓冲就无需实例化。

我可以使用new_with_new方法实例化TextView本身,并在缓冲区中传递它,但是我似乎无法弄清楚如何以可以传递缓冲区的方式扩展TextView类。进入我自己的扩展类,并将其传递给父级。

这是怎么做的?

1 个答案:

答案 0 :(得分:1)

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)