我正在使用python和pygtk。接口在glade文件中描述。我正在编写一个通用的MPV接口,尽可能通用。
我将glade文件中的小部件与模型中的字段相关联,我不想将父级演示者类子类化。我想检索在glade文件中声明的textbuffer小部件的名称:
<object class="GtkTextBuffer" id="tag_desc_textbuffer">
<signal name="changed" handler="on_textbuffer_changed" swapped="no"/>
</object>
在我的泛型 on_textbuffer_changed
中我收到文本缓冲区实例作为参数,但我如何得到它的名字?
现在我知道您无法使用任何小部件的字段name
来获取其name
,您需要使用这样的静态函数:gtk.Buildable.get_name(widget)
。
如果我尝试为gtk.TextBuffer
执行此操作,则会收到此错误:
TypeError: descriptor 'get_name' requires a 'gtk.Buildable' object but received a 'gtk.TextBuffer'
gtk.TextBuffer
甚至不知道id
或name
。
AttributeError: 'gtk.TextBuffer' object has no attribute 'name'
AttributeError: 'gtk.TextBuffer' object has no attribute 'id'
任何提示?
我想我要写一个专用的处理程序,其中小部件的名称已经知道。
def on_tag_desc_textbuffer_changed(self, widget, value=None):
return GenericEditorPresenter.on_textbuffer_changed(
self, widget, value, attr='description')
我不喜欢这个想法,因为最小子类化的演示者已经将所有view.widget_name→model.field_name与'tag_desc_textbuffer'相关联,包括'description'。我不喜欢重复这些信息......