width Entry

Entryとは
Windiowsではエディットボックスなどと呼ばれキーボードから文字を入力するためのウェジットです。

エントリーがチェックボタンやラジオボタンと異なるのは入力データが適切かを検証することがあります。お馴染みなのはパスワードは「8文字以上にしてください。」などです。最初は何も検証のないコードです。

import tkinter as tk

def main():
    root = tk.Tk()
    root.title('Entry')
    root.geometry("200x100")

    lblId = tk.Label(root, text='UserId')
    lblId.grid(row=0, column=0)

    lblPass = tk.Label(root, text='Password')
    lblPass.grid(row=1, column=0)

    # Username Entry
    UserId = tk.StringVar()
    id_entry = tk.Entry(
        root,
        textvariable=UserId,
        width=20)
    id_entry.grid(row=0, column=1)

    # Password Entry
    password = tk.StringVar()
    pass_entry = tk.Entry(
        root,
        textvariable=password,
        width=20,
        show='*')
    pass_entry.grid(row=1, column=1)


    btnOk = tk.Button(
        root, text='OK',
        command=lambda: print("%s,%s" % (UserId.get(), password.get())))
    btnOk.grid(row=3, column=0)

    btnCancel = tk.Button(root, text='Cancel', command=quit)
    btnCancel.grid(row=3, column=1)


    root.mainloop()

if __name__ == "__main__":
    main()

パスワードの入力では入力文字の表示を*にしてます。
show='*'
入力の検証
次に入力の検証です。検証のやり方は、
①OKボタンが押されたときに検証する
②キー入力された時、検証する
上記2つの方法があります。Tkinterでは②はコールバッグ関数で対応できます。パスワードの検証をします。
8文字以上の長さで文字は数字のみ有効とします。

import tkinter as tk
import re

def validate_password( P):
    #print(f'{d}, {i}, {P}, {s}, {S}, {v}, {V}, {W}')
    print(P)
    if len(P) < 8:
        btnOk['state'] = 'disabled'
    else:
        result = re.sub('\d', '', P)
        if len(result) == 0:
            btnOk['state'] = 'normal'
        else:
            btnOk['state'] = 'disabled'

    return True


if __name__ == "__main__":
    root = tk.Tk()
    root.title('Entry')
    root.geometry("200x100")

    lblId = tk.Label(root, text='UserId')
    lblId.grid(row=0, column=0)

    lblPass = tk.Label(root, text='Password')
    lblPass.grid(row=1, column=0)

    # Username Entry
    UserId = tk.StringVar()
    id_entry = tk.Entry(
        root,
        textvariable=UserId,
      width=20)
    id_entry.grid(row=0, column=1)

    # Password Entry
    validate_cmd = root.register(validate_password)
    password = tk.StringVar()
    pass_entry = tk.Entry(
        root,
        textvariable=password,
        # validatecommand=(validate_cmd, '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W'),
        validatecommand=(validate_cmd, '%P'),
        # validate='all',
        validate='key',
        width=20,
        show='*')
    pass_entry.grid(row=1, column=1)


    btnOk = tk.Button(
        root, text='OK',
        state='disabled',
        command=lambda: print("%s,%s" % (UserId.get(), password.get())))
    btnOk.grid(row=3, column=0)

    btnCancel = tk.Button(root, text='Cancel', command=quit)
    btnCancel.grid(row=3, column=1)

    root.mainloop()

正規表現をつかうためのインポートです。
import re
コールバック関数です。
validate_password( P):

Pは現在の入力文字です。
1から0の数字を削除します。全部数字なら文字の長さが0になることで全部数字か?を判定します。
 result = re.sub('\d', '', P)

今回if __name__ == "__main__"以下にメインのコードを書いています。これはコールバック関数がbtnOkが使えるようにしました。 グローバル変数でも対応できます。
validate_cmd = root.register(validate_password)
コールバック関数を validatecommandに設定するための処理です。
validatecommand=(validate_cmd,%P')
btnOkにコールバック関数が実装されました。
%値 意味
%d 1:挿入 0::削除
%i 挿入または削除された文字の位置
%P 新しい文字列
%s 以前の文字列
%S 挿入または削除される文字
%v validateのオプション allなど
%V 検証モード focusin, key, focusoutなど
%W Entryの名前

validate='key'
キーボードが押されるごとにコールバック関数が呼び出されます。 以下のオプションが使用可能。
none, focus, focusin, focusout, key, all