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

问题描述 投票:0回答:1

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

目前我的相关代码是:

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

    __gsignals__ = {
        # some signals
    }

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

到目前为止,这个类实例化并且工作得很好。我想做的改变让我需要使用new_with_buffer签名作为记录的here。简单地将缓冲区传递给super语句并不能解决问题,而实例化/调用super.add_with_buffer()也会导致错误。

我需要能够以这样一种方式扩展我的EditBox,即我可以使用父级中的new_with_buffer方法对其进行实例化,或者能够以这样的方式超级,以便它以正确的方式实例化它。在进行此更改后,我无需在没有缓冲区的情况下进行实例化。

我可以使用new_with_new方法实例化TextView本身,并将其传递给缓冲区,但我似乎无法弄清楚如何扩展TextView类,以便我可以将缓冲区传递到我自己的扩展类中并具有它传递给了父母。

这是怎么做到的?

python-3.x gtk gtk3 pygobject
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.