おはようございます。
問題文読ませていただきました。
こんな感じでいかがでしょうか?
python
1import tkinter
2import tkinter as tk
3from tkinter import font
4import re
5
6
7class toroku(tkinter.Frame):
8 def __init__(self, master):
9 # Windowの初期設定を行う。
10 super().__init__(master)
11
12 # Windowの画面サイズを設定する。
13 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
14 self.master.geometry("500x300")
15 # Windowのタイトルをつける。
16 self.master.title("登録")
17
18 self.create_widgets()
19
20 # 画面を閉じる関数
21 def return_view(self):
22 self.master.destroy()
23
24 # 入力検証するための関数
25 # 入力された文字に対して入力検証を行う。
26 # 入力検証について : https://kuroro.blog/python/YaHEdMd4ScGvrU44zdT6/
27 ################################################################
28 # d : テキストボックスを操作したアクション内容(1=insert(文字を追加した), 0=delete(文字を削除した), -1(その他))
29 # i : 現在テキストボックスに格納される、文字列の長さ + 1(文字列indexの長さ)
30 # P : 現在テキストボックスに格納される、文字列。
31 # s : 現在テキストボックスに格納される、1つ前の文字列。
32 # S : テキストボックスを操作した時の文字(挿入/削除する文字)
33 # v : entry Widget内で宣言される、validateの値
34 # V : 操作することでトリガーされた、validateの値(key, focusin, focusout, forced)(トリガーとは? : https://wa3.i-3-i.info/word12308.html)
35 # W : 現在利用中のWidgetの種類
36 ################################################################
37 def onValidate(self, d, i, P, s, S, v, V, W):
38 # 入力された文字が半角数字でない場合
39 # reについて : https://note.nkmk.me/python-re-match-search-findall-etc/
40 if W == '.!entry' and not re.match(re.compile('[0-9]+'), S):
41 # 入力不正のブザーを鳴らす。
42 self.bell()
43 return False
44
45 # 入力された文字が10文字以内の場合
46 # lenについて : https://note.nkmk.me/python-len-usage/
47 if len(P) <= 10:
48 return True
49 else:
50 # 入力不正のブザーを鳴らす。
51 self.bell()
52 return False
53
54 # Create Widgets function
55
56 def create_widgets(self):
57 # フォント設定
58 # size : フォントサイズを設定
59 setFont = font.Font(size=10)
60
61 # Windowを親要素として、label Widgetを作成する。
62 # text : テキスト情報
63 # font : フォント設定
64 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
65 LBL_1 = tkinter.Label(self.master, text='ID:', font=setFont)
66 # Windowを親要素として、label Widgetをどのように表示するのか?
67 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/
68 LBL_1.place(x=40, y=30)
69
70 # Windowを親要素として、label Widgetを作成する。
71 # text : テキスト情報
72 # font : フォント設定
73 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
74 LBL_2 = tkinter.Label(self.master, text='名:', font=setFont)
75 # Windowを親要素として、label Widgetをどのように表示するのか?
76 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/
77 LBL_2.place(x=40, y=70)
78
79 # Windowを親要素として、label Widgetを作成する。
80 # text : テキスト情報
81 # font : フォント設定
82 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
83 LBL_3 = tkinter.Label(self.master, text='メモ', font=setFont)
84 # Windowを親要素として、label Widgetをどのように表示するのか?
85 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/
86 LBL_3.place(x=40, y=110)
87
88 # 入力検証するための関数登録と、入力検証するために必要なデータ宣言を行う。
89 # register : 入力検証用関数の登録を行う。
90 # self.onValidate : 入力検証用関数
91 #
92 # %d = テキストボックスを操作したアクション内容(1=insert(文字を追加した), 0=delete(文字を削除した), -1(その他))
93 # %i = 現在テキストボックスに格納される、文字列の長さ + 1(文字列indexの長さ)
94 # %P = 現在テキストボックスに格納される、文字列。
95 # %s = 現在テキストボックスに格納される、1つ前の文字列。
96 # %S = テキストボックスを操作した時の文字(挿入/削除する文字)
97 # %v = entry Widget内で宣言される、validateの値
98 # %V = 操作することでトリガーされた、validateの値(key, focusin, focusout, forced)(トリガーとは? : https://wa3.i-3-i.info/word12308.html)
99 # %W = 現在利用中のWidgetの種類
100 vCmd = (self.register(self.onValidate),
101 '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
102
103 # Windowを親要素として、entry Widgetを作成する。
104 # width : 幅の設定
105 # validate : 入力検証するオプションの値を設定。
106 # validatecommand(vcmd) : 入力検証用関数の設定。
107 ##################################### validateオプションの種類 ###############################################
108 # none : 入力検証しない。
109 # focus : entry Widgetへカーソルがあたった、カーソルが外れた場合に入力検証する。
110 # focusin : entry Widgetへカーソルがあたった場合に入力検証する。
111 # focusout : entry Widgetへカーソルが外れた場合に入力検証する。
112 # key : entry Widgetへ文字の追加、削除が行われた場合に入力検証する。
113 # all : focus, focusin, focusout, key全て。
114 ############################################################################################################
115 # Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/
116 txt_kanja_id = tkinter.Entry(
117 self.master, width=30, validate="key", validatecommand=vCmd)
118 # Windowを親要素として、entry Widgetをどのように表示するのか?
119 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/
120 txt_kanja_id.place(x=140, y=30)
121
122 # Windowを親要素として、entry Widgetを作成する。
123 # width : 幅の設定
124 # validate : 入力検証するオプションの値を設定。
125 # validatecommand(vcmd) : 入力検証用関数の設定。
126 ##################################### validateオプションの種類 ###############################################
127 # none : 入力検証しない。
128 # focus : entry Widgetへカーソルがあたった、カーソルが外れた場合に入力検証する。
129 # focusin : entry Widgetへカーソルがあたった場合に入力検証する。
130 # focusout : entry Widgetへカーソルが外れた場合に入力検証する。
131 # key : entry Widgetへ文字の追加、削除が行われた場合に入力検証する。
132 # all : focus, focusin, focusout, key全て。
133 ############################################################################################################
134 # Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/
135 txt_kanja_name = tkinter.Entry(
136 self.master, width=30, validate="key", validatecommand=vCmd)
137 # Windowを親要素として、entry Widgetをどのように表示するのか?
138 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/
139 txt_kanja_name.place(x=140, y=70)
140
141 # Windowを親要素として、entry Widgetを作成する。
142 # width : 幅の設定
143 # validate : 入力検証するオプションの値を設定。
144 # validatecommand(vcmd) : 入力検証用関数の設定。
145 ##################################### validateオプションの種類 ###############################################
146 # none : 入力検証しない。
147 # focus : entry Widgetへカーソルがあたった、カーソルが外れた場合に入力検証する。
148 # focusin : entry Widgetへカーソルがあたった場合に入力検証する。
149 # focusout : entry Widgetへカーソルが外れた場合に入力検証する。
150 # key : entry Widgetへ文字の追加、削除が行われた場合に入力検証する。
151 # all : focus, focusin, focusout, key全て。
152 ############################################################################################################
153 # Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/
154 txt_memo = tkinter.Entry(
155 self.master, width=30, validate="key", validatecommand=vCmd)
156 # Windowを親要素として、entry Widgetをどのように表示するのか?
157 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/
158 txt_memo.place(x=140, y=110)
159
160 # Windowを親要素として、button Widgetを作成する。
161 # text : テキスト情報
162 # width : 幅の設定
163 # Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/
164 toroku_btn = tkinter.Button(self.master, text='登録', width=8)
165 # Windowを親要素として、button Widgetをどのように表示するのか?
166 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/
167 toroku_btn.place(x=140, y=200)
168
169 # Windowを親要素として、button Widgetを作成する。
170 # text : テキスト情報
171 # width : 幅の設定
172 # command : ボタンをクリックした時に、実行する関数を設定する。self.return_viewとする。
173 # Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/
174 btn_end = tkinter.Button(
175 self.master, text='閉じる', width=8, command=self.return_view)
176 # Windowを親要素として、button Widgetをどのように表示するのか?
177 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/
178 btn_end.place(x=140, y=240)
179
180
181def main():
182 # Windowを作成する。
183 root = tk.Tk()
184
185 app = toroku(master=root)
186
187 # Windowをループさせて、継続的にWindow表示させる。
188 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
189 app.mainloop()
190
191
192if __name__ == "__main__":
193 main()
ご確認のほど、よろしくお願いいたします。????♂️
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。