今日も見に来てくださって、ありがとうございます。石川さんです。
Tkinterで業務アプリケーション作るときに絶対避けて通れない、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()
使い方
普通にテキストを入力することができます。
入力されたテキストを取得するには、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
定義時にvalidate
とvalidatecommand
をセットしています。validateには、ここにあるように、”key”以外にも、”none”、”focusin”、”focusout”、”focus”、”all”が指定できるようです。ちなみに”focus”は、”focusin”と”focusout”の両方で、”all”は、”key”と”focusin”、”focusout”と同じだそうです。指定することで、いずれかのトリガーでコマンドが実行される、ということになります。
”%P”を指定しているところは、以下の指定が可能でそれぞれの意味を記載しておきます。
コード | 渡される値 |
%d | 1は挿入、0は削除、その他のイベントは-1 |
%i | 挿入または削除される文字列のインデックス |
%P | 変更後に想定されるフィールドの値 |
%s | 編集前のエントリの現在値 |
%S | 挿入または削除されるテキスト文字列 |
%v | 現在設定されている検証のタイプ(focusin、focusout、key、forced) |
%V | コールバックした検証のタイプ(focusin、focusout、key、forced) |
%W | ウィジェットの名前(entry!) |
まとめ
今回紹介した、validateとvalidatecommandを利用することで簡単な入力制限を実現できそうですね。