glade的类型替换
gtk的TextView是很强大的控件,基本上类似于Windows下的RichEditor,但是TextView有一个我认为是非常致命的缺陷,不支持undo,一个没有undo的编辑控件是很难用在比较成熟的应用上的。
我有个程序在使用TextView,所以我一直想给它加上undo,但又找不到简单好用的方法,最近发现可以使用gtkSourceView来代替gtkTextView,gtkSourceView是用于显示和编辑源码的编辑控件,它比gtkTextView又要强大了(比如支持语法高亮),并且支持了undo/redo。
我很兴奋的去尝试gtkSourceView,却发现glade不支持这个控件(晕了,glade到3.0版本了居然还有很多gtk控件不支持),有两个方法:
- 使用glade的custom widget,然后在代码里面来手动创建这个SourceView控件。
- 使用glade加载时的类型替换功能
第二个方法看起来非常的Coooool,它可以在glade文件加载时,通过一个参数传递一个类型替换表,表示将glade中定义的某些类型替换为另一种类型,也就是说,可以从TextView,替换为SourceView,当然缺省是什么也不替换的。
看看python的代码,是这个样子的。。。(超级简单啊)
override = {}
override["GtkTextView"] = gtksourceview.SourceView
override["GtkTextBuffer"] = gtksourceview.SourceBuffer
self.m_uixml = gtk.glade.XML (RESOURCEFILE, "app", "", override)
这样就OK了,所有的GtkTextView在加载后都变成了GtkSourceView,强悍。
相应的,原来使用TextBuffer的地方也要改成SourceBuffer。
我有个程序在使用TextView,所以我一直想给它加上undo,但又找不到简单好用的方法,最近发现可以使用gtkSourceView来代替gtkTextView,gtkSourceView是用于显示和编辑源码的编辑控件,它比gtkTextView又要强大了(比如支持语法高亮),并且支持了undo/redo。
我很兴奋的去尝试gtkSourceView,却发现glade不支持这个控件(晕了,glade到3.0版本了居然还有很多gtk控件不支持),有两个方法:
- 使用glade的custom widget,然后在代码里面来手动创建这个SourceView控件。
- 使用glade加载时的类型替换功能
第二个方法看起来非常的Coooool,它可以在glade文件加载时,通过一个参数传递一个类型替换表,表示将glade中定义的某些类型替换为另一种类型,也就是说,可以从TextView,替换为SourceView,当然缺省是什么也不替换的。
看看python的代码,是这个样子的。。。(超级简单啊)
override = {}
override["GtkTextView"] = gtksourceview.SourceView
override["GtkTextBuffer"] = gtksourceview.SourceBuffer
self.m_uixml = gtk.glade.XML (RESOURCEFILE, "app", "", override)
这样就OK了,所有的GtkTextView在加载后都变成了GtkSourceView,强悍。
相应的,原来使用TextBuffer的地方也要改成SourceBuffer。

0 Comments:
发表评论
<< Home