[Python,Gtk4]Gtk.Entryの使用について① Gtk.Entryの入力条件の変更

目的

 Gtk.Entryは、ユーザーが数字や文字を入力するWidgetです。そのGtk.Entryへの入力については、①入力文字数を制限したり、②書き込みの出来ない読み込み専用にしたり、③入力した文字を表示しないパスワード専用の入力にしたりすることができます。また、④未入力時には別のテキストを表示して、そのGtk.Entryに入力する内容を説明することが可能です。
 今回は、Gtk.Entryの入力を上記の4つの機能を付与する方法を見ていきます。

Gtk.Entryの設定

 Gtk.Entryの設定は、プロパティメソッドを使用して指定します。

入力文字数を制限する

 Gtk.Entryの入力文字数は、プロパティmax_lengthやメソッドset_max_length()を使用して指定します。

 ※ サンプルプログラムの26行目でプロパティmax_lengthを使用しています。

読み込み専用にする

 Gtk.Entryを読み取り専用にするのには、プロパティeditableを使用します。

 ※ サンプルプログラムの27行目でプロパティeditableを使用しています。

パスワード専用にする(入力文字を表示しない)

 Gtk.Entryをパスワード専用にするのには、プロパティvisibilityやメソッドset_visibility()を使用します。

 ※ サンプルプログラムの28行目でプロパティvisibilityを使用しています。

未入力時に表示する文字列を指定する

Gtk.Entryの未入力時に表示する文字列を指定するのには、プロパティplaceholder_textやメソッドset_placeholder_text()を使用します。

 ※ サンプルプログラムの26行目でプロパティplaceholder_textを使用しています。

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

 以下のサンプルプログラムを実行すると、下図のような3組のGtk.LabelとGtk.Entryが表示されます。Gtk.Entryの設定は、その左横のGtk.Labelや未入力時に表示される文字の通りです。

Gtk4で作成したGtk.Entrylの画像。①入力文字数制限、②入力不可、③入力文字の非表示を行っている。
import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk


APPID = 'com.github.taniyoshima.g4_fblog_entry'


class Gtk4TestTest(Gtk.Window):

    def __init__(self, app):
        Gtk.Window.__init__(
            self, application=app, title='Gtk.Entry Test',
            default_width=300, default_height=200)

        grid = Gtk.Grid(
            margin_top=20, margin_bottom=20,
            margin_start=20, margin_end=20,
            row_spacing=20, column_spacing=20
            )

        label1 = Gtk.Label(label='①入力数制限', xalign=0.0)
        label2 = Gtk.Label(label='②読み専用', xalign=0.0)
        label3 = Gtk.Label(label='③パスワード専用', xalign=0.0)

        entry1 = Gtk.Entry(max_length=5, placeholder_text='5文字入力')
        entry2 = Gtk.Entry(editable=False, text='入力不可')
        entry3 = Gtk.Entry(
            max_length=10, placeholder_text='入力文字非表示',
            visibility=False
        )

        grid.attach(label1, 0, 0, 1, 1)
        grid.attach(label2, 0, 1, 1, 1)
        grid.attach(label3, 0, 2, 1, 1)

        grid.attach(entry1, 1, 0, 1, 1)
        grid.attach(entry2, 1, 1, 1, 1)
        grid.attach(entry3, 1, 2, 1, 1)

        self.set_child(grid)


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()
タイトルとURLをコピーしました