GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ3/3)
「GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ2/3)」の続きで「実際の処理の流れ」内の続きからとなる。
色スキームの指定
下は「tango」の色スキームを指定する例。
self.__sourcebuf.set_style_scheme(self.__ssm.get_scheme('tango'))
ビューオブジェクトの作成
コンストラクタ引数にバッファオブジェクトを指定する。
self.__sourceview = gtksourceview2.View(self.__sourcebuf)
その後好みでフォントを変更する。pango.FontDescriptionオブジェクト(「ファミリ名/(スタイル/)サイズ」をコンストラクタ引数に指定)をメンバ関数modify_font()に渡す。
self.__sourceview.modify_font(pango.FontDescription('Monospace 8'))
スクリプトの先頭ではpangoモジュールをimportしておく。
ScrolledWindowに入れる
他のスクロールさせるGUI部品(テキストビューやツリービューなど)と同様、スクロールバーを付けてスクロールできるようにする。
self.__sw = gtk.ScrolledWindow() self.__sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.__sw.add(self.__sourceview)
この後は他のGUI部品と同様にScrolledWindowを配置する。
例
このPythonスクリプトの内容をPythonのスクリプトとして色付き表示し、「tango」の色スキームを用いて表示する。
[任意]ファイル名: gtksourceviewtest2.py
#! /usr/bin/python # -*- coding: utf-8 -*- import sys try: import pygtk pygtk.require('2.0') except: pass try: import pango import gtk except: print >> sys.stderr, 'Error: PyGTK is not installed' sys.exit(1) try: import gtksourceview2 except: print >> sys.stderr, 'Error: PyGtkSourceView is not installed' sys.exit(1) class MainWindow(gtk.Window): """ メインウィンドウ """ def __init__(self, *args, **kwargs): gtk.Window.__init__(self, *args, **kwargs) # ショートカットキー(アクセラレータ) self.__accelgroup = gtk.AccelGroup() self.add_accel_group(self.__accelgroup) # メニュー項目 self.__item_quit = gtk.ImageMenuItem(gtk.STOCK_QUIT, self.__accelgroup) self.__menu_file = gtk.Menu() self.__menu_file.add(self.__item_quit) self.__item_file = gtk.MenuItem('_File') self.__item_file.props.submenu = self.__menu_file self.__menubar = gtk.MenuBar() self.__menubar.append(self.__item_file) # ソースビュー関係 # 言語マネージャとスタイルスキームマネージャ self.__lm = gtksourceview2.language_manager_get_default() self.__ssm = gtksourceview2.style_scheme_manager_get_default() # 言語マネージャのguess_language()でファイルを読ませて # 言語を推測することができる guessed_lang = self.__lm.guess_language(filename=__file__) if guessed_lang: self.__sourcebuf = gtksourceview2.Buffer(language=guessed_lang) else: self.__sourcebuf = gtksourceview2.Buffer() # 言語マネージャのget_language()で名前を指定することで手動での指定もできる # 指定された名前の言語が得られない場合Noneが返る lang = self.__lm.get_language('python') # GObjectプロパティlanguageへの代入による指定/変更もできる self.__sourcebuf.props.language = lang # 下は代わりにlanguage引数に直接入れた場合 #self.__sourcebuf = gtksourceview2.Buffer(language=self.__lm.get_language('python')) self.__sourcebuf.set_style_scheme(self.__ssm.get_scheme('tango')) # このスクリプトの内容を読み込んで表示する f_in = open(__file__, 'r') # begin_not_undoable_action()からnot_undoable_action()までの間の操作は # 取り消し(undo)可能なものとして記録されないようになる self.__sourcebuf.begin_not_undoable_action() self.__sourcebuf.props.text = f_in.read() self.__sourcebuf.end_not_undoable_action() f_in.close() self.__sourceview = gtksourceview2.View(self.__sourcebuf) self.__sourceview.modify_font(pango.FontDescription('Monospace 8')) self.__sw = gtk.ScrolledWindow() self.__sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.__sw.add(self.__sourceview) # レイアウト用コンテナ self.__vbox = gtk.VBox() self.__vbox.pack_start(self.__menubar, expand=False, fill=False) self.__vbox.pack_start(self.__sw) # シグナル self.connect('delete_event', gtk.main_quit) self.__item_quit.connect('activate', gtk.main_quit) # ウィンドウ self.add(self.__vbox) self.set_size_request(300, 200) self.resize(450, 260) self.props.title = 'Python GtkSourceView Test' class PyGtkSourceViewTest2: """ GtkSourceViewのテスト2 """ def main(self): """ アプリケーションのメイン処理 """ win = MainWindow() win.show_all() gtk.main() if __name__ == '__main__': app = PyGtkSourceViewTest2() app.main()
関連記事:
- GtkSourceView(バージョン2系)の概要について(概要と基本的な機能)
- GtkSourceView(バージョン2系)の概要について(テキストビューを置き換えるだけの例)
- GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ1/3)
- GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ2/3)
使用したバージョン:
- Python 2.6.4
- PyGTK 2.16.0
- PyGtkSourceView 2.8.0