【问题标题】:How do I extend PyGobject class when needing to instantiate with alternative signature?当需要使用替代签名进行实例化时,如何扩展 PyGobject 类?
【发布时间】:2019-07-15 16:27:21
【问题描述】:

我正在一个项目中使用 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】:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      相关资源
      最近更新 更多