前提・実現したいこと
python初心者です。
不足点などあればお教えください。
これに近いかと思いましたが、解決方法が違ったようで…
https://teratail.com/questions/60174
出勤管理アプリを作っています。
4桁の社員番号をentryに入力させるのですが、数字以外も入ってしまうことに気づきました。
entryに数字以外を入れさせない方法はどのようになるでしょうか?
発生している問題・エラーメッセージ
数字しか入力させたくないentryに数字以外が入ってしまう
該当のソースコード
import tkinter as tk root = tk.Tk() #entryを設定 Number = tk.Entry(font=("15","25"),textvariable=sv) Number.place(x=175,y=100) InEnter = tk.Label(root,text = "出勤",font=("25","40"),bg="blue") InEnter.place(x=200,y=175) InEnter.bind("<Button-1>", InWork) def InWork(event): Status = "出勤" EmpNum = Number.get()#EmpNumは社員番号 EmpNum_Count = len(EmpNum) if EmpNum_Count == 4 : d_now = str(format(datetime.now().strftime("%Y/%m/%d"))) t_now = str(format(datetime.now().strftime("%H:%M:%S"))) print(EmpNum,d_now,t_now,Status) root.mainloop()
結果
4桁の数字以外も入ってしまう
試したこと
コードを次のように変更
変更1
def OutWork(event): Status = "退勤" EmpNum = Number.get() EmpNum_Count = len(EmpNum) if EmpNum_Count == 4 and type(EmpNum) is int:#数字=intだからand条件にすればいい? d_now = str(format(datetime.now().strftime("%Y/%m/%d"))) t_now = str(format(datetime.now().strftime("%H:%M:%S"))) print(EmpNum,d_now,t_now,Status)
結果
数字4桁も入らなくなった
変更2
def InWork(event): Status = "出勤" EmpNum = Number.get()#EmpNumは社員番号 EmpNum_Count = len(EmpNum) if EmpNum = int(EmpNum):#ここで社員番号をintにする if EmpNum_Count == 4 and type(EmpNum) is int:#if文で4桁かつintだけ通す? d_now = str(format(datetime.now().strftime("%Y/%m/%d"))) t_now = str(format(datetime.now().strftime("%H:%M:%S"))) print(EmpNum,d_now,t_now,Status)
結果
数字4桁の場合入る
アルファベットを入れると以下のエラー
Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__ return self.func(*args) File "C:\python\tkinter\tkinter_PG.py", line 24, in InWork EmpNum = int(EmpNum) ValueError: invalid literal for int() with base 10: 'aaaa'
補足情報(FW/ツールのバージョンなど)
python Ver3.8.0です
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/03 01:56
2019/12/03 06:47
2019/12/03 08:27