2017-06-15 23 views
0

私は自分のプログラムに整数を入力する必要があります。彼らは弦/浮きを入力することはできません。ユーザーが整数を入力せずにボタンをクリックした場合、何かにログインする際にユーザー名/パスワードが正しくない場合に表示されるエラーメッセージと同様のポップアップが表示されます。ここTkinterユーザーが文字列をスピンボックスに入力するのを防ぐ方法

from tkinter import * 

class GUI: 
    def __init__(self, parent): 
     self.iv = IntVar() 
     self.sb = Spinbox(parent, from_=0, to=10, textvariable = self.iv) 
     self.sb.pack() 
     self.b1 = Button(parent, text="Confirm") 
     self.b1.pack() 

root = Tk() 
root.geometry("800x600") 
GUI = GUI(root) 
root.title("Example") 
root.mainloop() 
+3

は、それは除いて、空を実行する場合のボックス – Splinxyy

+0

、try/exceptブロック内の整数にテキストを変換してみ見ることができましたSpinboxの作成時に 'values = range(11)'を使用します。 – SolarFactories

+0

@SolarFactories with python 3、 'range'を' list': 'values = list(range(11))'に変換する必要があります。 –

答えて

0

はSplinxyy提案に対応するコードである:

from tkinter import * 
from tkinter.messagebox import showerror 

class GUI: 
    def __init__(self, parent): 
     self.iv = IntVar() 
     self.sb = Spinbox(parent, from_=0, to=10, textvariable = self.iv) 
     self.sb.pack() 
     self.b1 = Button(parent, text="Confirm", command=self.validate) 
     self.b1.pack() 

    def validate(self): 
     nb = self.sb.get() 
     try: 
      nb = int(nb) 
      # do something with the number 
      print(nb) 
     except Exception: 
      showerror('Error', 'Invalid content') 


root = Tk() 
root.geometry("800x600") 
GUI = GUI(root) 
root.title("Example") 
root.mainloop() 
1

ブロックを除い/トライ内部int()とスピンボックスのコンテンツを変換するスピンボックスエントリウィジェットとまったく同じ方法で入力検証をサポート。数字の入力のみを許可するvalidatecommandを設定することができます。例えば

class GUI: 
    def __init__(self, parent): 
     ... 
     # add validation to the spinbox 
     vcmd = (parent.register(self.validate_spinbox), '%P') 
     self.sb.configure(validate="key", validatecommand=vcmd) 

    def validate_spinbox(self, new_value): 
     # Returning True allows the edit to happen, False prevents it. 
     return new_value.isdigit() 

入力検証の詳細についてはInteractively validating Entry widget content in tkinter

関連する問題