実現したいこと
Entryに入力できる値を実数のみにしたいです。
実数は、正負,整数,浮動小数点数,10の累乗,e指数表記,0省略としたいです。
該当のソースコード
python
1import tkinter as tk 2import re 3 4class Application(tk.Frame): 5 entry = None 6 7 def onValidate(self, S): 8 if re.match(re.compile('[+-]?(?:\d+\.?\d*|\.\d+)(?:(?:[eE][+-]?\d+)|(?:\*10\^[+-]?\d+))?'), str(S)): 9 return True 10 else: 11 self.bell() 12 return False 13 14 def __init__(self, master=None): 15 super().__init__(master) 16 self.master.geometry("300x200") 17 frame = tk.Frame(self.master) 18 frame.pack() 19 20 vcmd = self.register(self.onValidate) 21 self.var = tk.DoubleVar(value='') 22 self.entry = tk.Entry(frame, width=15, textvariable=self.var, validate="key", validatecommand=(vcmd, '%S')) 23 self.entry.pack() 24 25if __name__ == "__main__": 26 root = tk.Tk() 27 app = Application(master=root) 28 app.mainloop()
試したこと
当たり前ですが、\d+で1個以上となっていることが、問題と思い\d?とすると、すべての文字が使用可能となってしまいました。
入力した値の先頭にmatchしている(と理解しています)ので、|を用いて記載した場合は、小数点.やeが好きなだけかけてしまい期待した結果にできませんでした。
補足情報
プログラミング学習を始めて1か月に満たないので、お手数ですがわかりやすく説明いただきたいです。
よろしくお願いいたします。
