[Python,Gtk4] Gtk.TextViewの使用について

目的

 Gtk.TextViewは、複数行のテキストを表示、編集するWidgetです。今回は、Gtk.TextViewより①テキストを表示する方法と②テキストを取得する方法を見ていきます。

Gtk.TextViewの設定

 Gtk.TextViewの外観やテキストの設定は、プロパティメソッドを使用して指定します。

Gtk.TextViewにテキストを表示する

 Gtk.TextViewに値を書き込むには、まず、Gtk.TextBufferにテキストをメソッドset_text()により書き込み、それをGtk.TextViewにメソッドset_buffer()により、セットします。

 Gtk.TextBufferのメソッドset_text()は、textにテキスト、lenにテキストの文字数を入力します。

        buffer = Gtk.TextBuffer()
        buffer.set_text("hello\nhekelba", 13)
        self.textview.set_buffer(buffer)

Gtk.TextViewからテキストを取得する

 Gtk.TextViewの値を取得するには、メソッドget_buffer()でGtk.TextViewからBufferを取得して、メソッドget_text()によりテキストを取得します。

 Gtk.TextBufferからテキストを取得するget_text()では、取得するテキストの最初(start)と最後(end)、非表示のテキストを含めるかを指定します。

 Gtk.TextBufferからテキストの最初はget_buffer().get_start_iter()により、最後はget_buffer().get_end_iter()で取得します。

Gtk.TextViewのサンプルプログラム

 以下のサンプルプログラムを実行すると、下図のようなGtk.TextViewと2つのGtk.Button(ラベルが「書き込み」と「取得」のもの)が表示されます。「書き込み」ボタンを押すと、Gtk.TextViewに指定したテキストを表示します。「取得」ボタンを押すと、Gtk.TextViewに表示したテキストを取得して、ターミナルに表示します。

import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk


APPID = 'com.github.taniyoshima.g4_fblog_textview'


class Gtk4TestTest(Gtk.Window):

    def __init__(self, app):
        Gtk.Window.__init__(
            self, application=app, title='Gtk.TextView Test')

        box = Gtk.Box(
            width_request=300, height_request=280,
            margin_top=20, margin_bottom=20,
            margin_start=20, margin_end=20,
            spacing=30,
            hexpand=True, vexpand=True,
            orientation=Gtk.Orientation.VERTICAL
        )

        self.textview = Gtk.TextView(vexpand=True)

        button1 = Gtk.Button(label='書き込み')
        button1.connect('clicked', self.on_button1_clicked)

        button2 = Gtk.Button(label='取得')
        button2.connect('clicked', self.on_button2_clicked)

        box.append(self.textview)
        box.append(button1)
        box.append(button2)

        self.set_child(box)

    def on_button1_clicked(self, button):
        buffer = Gtk.TextBuffer()
        buffer.set_text("hello\nhekelba", 13)
        self.textview.set_buffer(buffer)

    def on_button2_clicked(self, button):
        text = self.textview.get_buffer().get_text(
            self.textview.get_buffer().get_start_iter(),
            self.textview.get_buffer().get_end_iter(),
            False
        )
        print(text)


class Gtk4TestApp(Gtk.Application):

    def __init__(self):
        Gtk.Application.__init__(self, application_id=APPID)

    def do_activate(self):
        window = Gtk4TestTest(self)
        window.present()


def main():
    app = Gtk4TestApp()
    app.run()


if __name__ == '__main__':
    main()

まとめ

  • Gtk.TextViewに値を書き込むには、Gtk.TextBufferにテキストを書き込み、それをGtk.TextViewにメソッドset_buffer()により、セットします。
  • Gtk.TextViewの値を取得するには、メソッドget_buffer()でGtk.TextViewからBufferを取得して、メソッドget_text()によりテキストを取得します。

 次回の予定

 Gtk.TextViewのテキストは、表示する文字のフォントを文字単位で変更したり、画像を挿入したりすることが出来ます。これらの機能は、使ったことが無いので、また使うことが有りましたら、その方法を書くことにします。

 次回は、Gtk.TreeViewについて見ていきます。

タイトルとURLをコピーしました