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文
で禁止処理をしています。
コメント