我正在项目中使用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类。进入我自己的扩展类,并将其传递给父级。
这是怎么做的?
答案 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)