Python言語 実践①

当ページのリンクには広告が含まれています。

Tkinterを使ったユーザ入力プログラムのサンプルを記載します。

ユーザ認証等では必須で利用するので備忘録用に置いときます。

目次

Tkinter ユーザ認証

よしぼん

基本的なユーザ認証の入力画面の作成です。

よしぼん

ウィジットにフォーカスイン、フォーカスアウト等の
リアルタイムの情報を得る事ができます。

ソースコード

Tkinter Usr Loign
from tkinter import *
from tkinter import ttk


def validate_username(d, i, P, s, S, v, V, W):
    #%d	アクションのタイプ。文字の挿入の場合 1。削除の場合 0。再検証の場合 -1
    #%i	挿入または削除された文字のインデックス
    #%P	Entry の新しい値
    #%s	編集前の Entry の値
    #%S	挿入または削除される文字
    #%v	validate オプションの現在の値
    #%V	検証の条件 (モード)
    #%W	Entry ウィジェットの名前
    print(f'{d}, {i}, {P}, {s}, {S}, {v}, {V}, {W}')

    #8文字以下または16文字以上の場合はNG
    if len(P) < 8:
        button1['state'] = 'disabled' #入力を禁止
    elif len(P) > 16:
        button1['state'] = 'disabled' #入力を禁止
    else:
        button1['state'] = 'normal' #通常の処理
    return True


if __name__ == '__main__':

    app = Tk()
 
 # クラシックバージョンでの表示したい場合
 #   ttk.Style().theme_use('classic')
 
    app.title('ユーザログイン')
    app.resizable(False, False)

    frame1 = ttk.Frame(app, padding=(32))
    frame1.grid()

    label1 = ttk.Label(frame1, text='ユーザID', padding=(5, 2))
    label1.grid(row=0, column=0, sticky=E)

    label2 = ttk.Label(frame1, text='パスワード', padding=(5, 2))
    label2.grid(row=1, column=0, sticky=E)

    # Username Entry
    username = StringVar()
    val_cmd = app.register(validate_username)
    username_entry = ttk.Entry(
        frame1,
        textvariable=username,
        validatecommand=(val_cmd, '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W'),
    #バリデートのオプションを全て有効にする
    #none なし
    #focus フォーカスした時
    #focusin フォーカスインした時
    #forcusout フォーカスアウトした時
    #key
    #all 全てを設定する
        validate='all',
        width=20, exportselection=1)
    #フレームのサイズ場所を指定
    username_entry.grid(row=0, column=1)

    # Password Entry
    password = StringVar()
    password_entry = ttk.Entry(
        frame1,
        textvariable=password,
        width=20,
        show='*')
    password_entry.grid(row=1, column=1)

    #フレームのサイス場所を指定
    frame2 = ttk.Frame(frame1, padding=(0, 5))
    frame2.grid(row=2, column=1, sticky=W)

    #ボタンが押されたあとの処理 command以下が実処理
    button1 = ttk.Button(
        frame2, text='実行', state='disabled',
        command=lambda: print("Username %s, Password %s" % (username.get(), password.get())))
    button1.pack(side=LEFT)

    button2 = ttk.Button(frame2, text='取消', command=quit)
    button2.pack(side=LEFT)

    app.mainloop()
よしぼん

validatecommand=(val_cmd, ‘%d’, ‘%i’, ‘%P’, ‘%s’, ‘%S’, ‘%v’, ‘%V’, ‘%W’)
#none なし
#focus フォーカスした時
#focusin フォーカスインした時
#forcusout フォーカスアウトした時
#key
#all 全てを設定する

よしぼん

validate_usernameでボタンのステータスを
disabled・nomalを入り変えて入力の制御を行っています。
よくある制御として8文字以上16文字以下になるようにif文
で禁止処理をしています。

・   ・   ・

デイトラWeb制作コース

この記事を書いた人

ITシステムエンジニア×農業
の二足のわらじのパパです。
Webサイトの構築を承ります。
動きのあるLPを作ります。

コメント

コメントする

CAPTCHA


目次