"No.*"という形式の文字列のみエントリに入力できるようにしたいです。
後からエントリの文字列を拾って比較するというよりは、形式が違えば入力そのものをできないようにしたいです。
とりあえず、期待動作できるようにはなりましたが、ほかにいい方法はありますか?
スマートな方法であれば、そちらを採用したいです。
また、以下のやり方で良くない部分があれば指摘してほしいです。
Python
1import tkinter as tk 2from tkinter import ttk 3 4def func(p): 5 # エントリにインサートする文字列を "No.*" に制限(*は0文字以上の任意の文字)。 6 # IndexError を起こさないために、len(p) >= n and p[n-1] == "*" とする。 7 # 上記について、and は前者がFalseの場合、後者を見ないため。 8 # ちなみに、or は前者がTrueの場合、後者を見ない。 9 10 jouken = \ 11 p == "" or \ 12 len(p) == 1 and p[0] == "N" or \ 13 len(p) == 2 and p[1] == "o" or \ 14 len(p) == 3 and p[2] == "." or \ 15 len(p) > 3 and True 16 17 return jouken 18 19if __name__ == "__main__": 20 win = tk.Tk() 21 win.geometry("300x300+0+0") 22 23 sv = tk.StringVar() 24 25 vcmd = win.register(func) 26 27 entry = ttk.Entry(win, textvariable=sv, validatecommand=(vcmd, "%P"), validate="key") 28 entry.grid() 29 30 win.mainloop() 31 32# 参考:https://python.keicode.com/advanced/tkinter-widget-entry-validate.php
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/24 12:11