GUIのTKinterを使ったクラス割り当てのための基本的なBMI計算プログラムを作っていて、ユーザーの入力を検証しようとすると問題が発生しました。 数値入力のみを許可し、 '計算'ボタンを無効にして、ユーザーが数字以外のものを入力したときにエラーメッセージを送信しようとしています。しかし、分時には1桁の数字(たとえば2)に対してエラーが発生しますが、複数の桁(たとえば23)は受け入れます。私はこれについて全く新しいので、なぜこれが起こっているのか、あるいはこれを書く良い方法があるのか説明してください。あなたの助けを事前にPython isdigit()が予期せぬ結果を返す
#calculate button
cal = ttk.Button(main, text = 'Calculate!')
cal.grid(row = 4, column = 2)
#height entry box
hb = tk.Entry(main, textvariable = height)
hb.grid(row = 2, column = 2)
hb.bind('<Key>', lambda event: val(hb.get()))
#validation error message
vrs = tk.Label(main, text = 'Please enter a number in the box')
vrs.grid(row = 8, column = 2)
#so that its position is saved but won't appear until validation fails
vrs.grid_remove()
#validation function
def val(value):
if value.isdigit():
print('valid')
vrs.grid_remove()
cal.state(['!disabled'])
else:
print('invalid')
vrs.grid()
cal.state(['disabled'])
ありがとう:ここ
は、私のコードの関連部分です。
を参照してください。私の知る限り、入力は文字列です。ちょうど私が 'str(value).isdigit():'を試みたかどうかをチェックするのに、同じ結果が出ました。明確にするために、私は排他的に1桁の数字を望んでいませんが、私はそれらを「無効」として分類したくありません – lemonshark
OP _is_は文字列上でisdigitを呼び出します。 –