Python tkinter GUIプログラミング Entry概要

 今日も見に来てくださって、ありがとうございます。石川さんです。

 Tkinterで業務アプリケーション作るときに絶対避けて通れない、Entryについてちょっとまとめたいと思います。Entryは一行だけデータを入力できるフィールドを作るためのウィジェットです。データが入力できるだけだよねぇ、と、思っていたのですが、意外と便利な機能が用意されているようです。

実行イメージ

 普通にEntryを何の飾りもなく使うとこんな感じになります。

Entry実行イメージ

ソースコード

 もっともシンプルなEntryの使い方は、以下の通りです。

import tkinter as tk

class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("Entry Test")
        self.entry = tk.Entry()
        self.entry.pack()
    
if __name__ == "__main__":
    app = App()
    app.mainloop()

使い方

 普通にテキストを入力することができます。

abcdefgを入力してみました。

 入力されたテキストを取得するには、self.entry.get()のように、getメソッドで入力されたテキストを取得することができます。

 入力時のチェックは、validate、validatecommandで実装可能です。例えば入力文字数を6文字に限定するにはスクリプトを以下のように書き換えます。

import tkinter as tk

class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("Entry Test")
        vc = (self.register(self.validate_command), "%P")
        self.entry = tk.Entry(validate="key", validatecommand=vc)
        self.entry.pack()
        
    def validate_command(self, string):
        return len(string) <= 6
                
if __name__ == "__main__":
    app = App()
    app.mainloop()

 7行目でコマンドを登録して8行目のEntry定義時にvalidatevalidatecommandをセットしています。validateには、ここにあるように、”key”以外にも、”none”、”focusin”、”focusout”、”focus”、”all”が指定できるようです。ちなみに”focus”は、”focusin”と”focusout”の両方で、”all”は、”key”と”focusin”、”focusout”と同じだそうです。指定することで、いずれかのトリガーでコマンドが実行される、ということになります。

 ”%P”を指定しているところは、以下の指定が可能でそれぞれの意味を記載しておきます。

コード渡される値
%d1は挿入、0は削除、その他のイベントは-1
%i挿入または削除される文字列のインデックス
%P変更後に想定されるフィールドの値
%s編集前のエントリの現在値
%S挿入または削除されるテキスト文字列
%v現在設定されている検証のタイプ(focusin、focusout、key、forced)
%Vコールバックした検証のタイプ(focusin、focusout、key、forced)
%Wウィジェットの名前(entry!)
指定できるコードの種類

まとめ

 今回紹介した、validateとvalidatecommandを利用することで簡単な入力制限を実現できそうですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。