Tkinterでエントリを複数個作成します。今回は5個作成します。
ユーザはエントリにデータを入力します。
入力しなければならない個数は決まっていません。
ただし、最低1つは入力します。
入力は上のエントリから順番にします。
そのため、エラー(抜け防止)は
- データが1つも入力されていないとき
- 未入力エントリがあり、それより下のエントリに入力があるとき
に発生するようにしたいです。
例えば、下のようにエントリ[]に対し入力した場合
[a]
[]
[]
[d]
[]
2番目と3番目が入力されていないので、この2つはエラーの対象です。
最低1つ入力 かつ 抜けなしならいいので、上の例では5番目はエラーの対象になりません。
そのため、エラーは「2番目と3番目に入力漏れあり」と出るのが理想です。
まあ2番目だけでもいいです。
3番目だけっていうのは違う気がします(ユーザからしたら、一つずつのエラー表示なら「せめて上から指摘しろよ」って感じになりそう)。
テキストボックスの色を変えるとかでもいいです。
とりあえず「○番目」か分かればいいです。
一応判別するためのプログラムを自分で作ってはみたのですが、上からではなく下からチェックしてしまっているからか、上の例だと3番目のエラー表示になってしまいます。
それが下のコードです。
chk()の部分で抜け防止のためのチェックをしています。
一度 5個全てのエントリをget()してから、上から最下入力済みエントリまで比較する方法も考えてはみたのですが、処理が多いような気もしました。(get()してから比較すると2周してるため)
チェック部分の処理効率を重視した場合にほかにどんなチェック方法が考えられますか。
Python
1import tkinter as tk 2 3def chk(): 4 global entries 5 if entries[0].get() == "": 6 print("1番目が未入力") 7 return False 8 for i in range(4): 9 if entries[i].get() == "": 10 if entries[i + 1].get() != "": 11 print("{}番目が未入力".format(i + 1)) 12 return False 13 return True 14 15def pushed(e): 16 if chk() == True: 17 print("o:未入力なし") 18 else: 19 print("x:未入力あり") 20 21win = tk.Tk() 22win.geometry("300x200") 23 24entries = [] 25 26for i in range(5): 27 entry = tk.Entry(win) 28 entry.grid() 29 entries.append(entry) 30 31button = tk.Button(win, text="click", width=10, default="active") 32button.grid() 33 34button.bind("<ButtonRelease>", pushed) 35 36win.mainloop()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/05 02:17