回答編集履歴

2

動作したものを更に追記

2020/10/30 00:29

投稿

ebal
ebal

スコア62

test CHANGED
@@ -99,3 +99,259 @@
99
99
  root.mainloop()
100
100
 
101
101
  ```
102
+
103
+
104
+
105
+ ---
106
+
107
+ # 更に追記
108
+
109
+
110
+
111
+ なんとなくもったいない気がしたので私が手元で動かしたソース貼っておきます.
112
+
113
+ 画像関係はずしてあるので戻す必要はありますが.
114
+
115
+
116
+
117
+ ```python3
118
+
119
+ from tkinter import ttk
120
+
121
+ import tkinter
122
+
123
+ import random
124
+
125
+
126
+
127
+
128
+
129
+ class PlaceholderEntry(tkinter.Entry):
130
+
131
+ def __init__(self, container, placeholder, *args, fg1="#d5d5d5", fg2="black", **kwargs):
132
+
133
+ super().__init__(container, *args, **kwargs)
134
+
135
+ self.placeholder = placeholder
136
+
137
+ self.fg1 = fg1
138
+
139
+ self.fg2 = fg2
140
+
141
+
142
+
143
+ self.insert("0", self.placeholder)
144
+
145
+ self.bind("<FocusIn>", self._clear_placeholder)
146
+
147
+ self.bind("<FocusOut>", self._add_placeholder)
148
+
149
+ self["fg"] = fg1
150
+
151
+
152
+
153
+ def _clear_placeholder(self, e):
154
+
155
+ if hasattr(self, "placeholder"):
156
+
157
+ self.delete("0", "end")
158
+
159
+ self["fg"] = self.fg2
160
+
161
+
162
+
163
+ def _add_placeholder(self, e):
164
+
165
+ if not self.get():
166
+
167
+ self.insert("0", self.placeholder)
168
+
169
+ self["fg"] = self.fg2
170
+
171
+
172
+
173
+
174
+
175
+ # 数字をランダム出力
176
+
177
+ D = random.randint(0, 5)
178
+
179
+ # ウィンドウ作成
180
+
181
+ root = tkinter.Tk()
182
+
183
+ root.title("運勢占い")
184
+
185
+ root.minsize(640, 480)
186
+
187
+ root.option_add("*font", ["MS Pゴシック", 22])
188
+
189
+ # 画像読み込み
190
+
191
+ # getu = tkinter.PhotoImage(file="大吉.png")
192
+
193
+ # ka = tkinter.PhotoImage(file="凶.png")
194
+
195
+ # sui = tkinter.PhotoImage(file="吉.png")
196
+
197
+ # moku = tkinter.PhotoImage(file="小吉.png")
198
+
199
+ # #画像表示
200
+
201
+ # canvas = tkinter.Canvas(bg="plum", width=640, height=480)
202
+
203
+ # canvas.place(x=0, y=0)
204
+
205
+ # img = tkinter.PhotoImage(file="神社.png")
206
+
207
+ # canvas.create_image(320, 240, image=img)
208
+
209
+ # ラベル01
210
+
211
+ question = tkinter.Label(text="あなたが入力した数字で今日の運勢を調べます。\n 0から10の数字を↓に入力してください。", bg="plum")
212
+
213
+ question.place(x=27, y=20)
214
+
215
+ # ラベル02
216
+
217
+ entry = PlaceholderEntry(root, "0", width=2, bd=4, bg="pink")
218
+
219
+ entry.place(x=300, y=140)
220
+
221
+ #ラベル03
222
+
223
+ button = tkinter.Button(text="決定ボタン",bg="peachpuff")
224
+
225
+ button.place(x=240, y=400)
226
+
227
+ #おみくじ始まり
228
+
229
+ def btn_click():
230
+
231
+ a = float(entry.get())
232
+
233
+ if a > 10:
234
+
235
+ again_text = tkinter.Label(text="0から10の数字を入力してください。",fg="red",bg="plum")
236
+
237
+ again_text.place(x=105,y=20)
238
+
239
+ question.destroy()
240
+
241
+ return
242
+
243
+ if a < 0:
244
+
245
+ again_text = tkinter.Label(text="0から10の数字を入力してください。",fg="red",bg="plum")
246
+
247
+ again_text.place(x=105,y=20)
248
+
249
+ question.destroy()
250
+
251
+ return
252
+
253
+ if a+D == 8 or a+D == 9:
254
+
255
+ again_text = tkinter.Label(text="                        ",fg="red",bg="plum")
256
+
257
+ again_text.place(x=100,y=20)
258
+
259
+ res_text = tkinter.Label(text="あなたの今日の運勢は大吉です。",fg="red", bg="plum")
260
+
261
+ res_text.place(x=115, y=20)
262
+
263
+ res_text = tkinter.Label(text="やったね!", bg="plum")
264
+
265
+ res_text.place(x=250, y=425)
266
+
267
+ canvas.delete("all")
268
+
269
+ question.destroy()
270
+
271
+ entry.destroy()
272
+
273
+ button.destroy()
274
+
275
+ canvas.create_image(320, 240, image=getu)
276
+
277
+ if 10 <= a+D <= 15:
278
+
279
+ again_text = tkinter.Label(text="                           ",fg="red",bg="plum")
280
+
281
+ again_text.place(x=100,y=20)
282
+
283
+ res_text = tkinter.Label(text="あなたの今日の運勢は凶です。",fg="darkviolet",bg="plum")
284
+
285
+ res_text.place(x=120, y=20)
286
+
287
+ res_text = tkinter.Label(text="ざんねーん", bg="plum")
288
+
289
+ res_text.place(x=250, y=425)
290
+
291
+ canvas.delete("all")
292
+
293
+ question.destroy()
294
+
295
+ entry.destroy()
296
+
297
+ button.destroy()
298
+
299
+ canvas.create_image(320, 240, image=ka)
300
+
301
+ if 4 <= a+D <= 7:
302
+
303
+ again_text = tkinter.Label(text="                           ",fg="red",bg="plum")
304
+
305
+ again_text.place(x=100,y=20)
306
+
307
+ res_text = tkinter.Label(text="あなたの今日の運勢は吉です。",fg="green",bg="plum")
308
+
309
+ res_text.place(x=120, y=24)
310
+
311
+ res_text = tkinter.Label(text="おっええやん", bg="plum")
312
+
313
+ res_text.place(x=240, y=430)
314
+
315
+ canvas.delete("all")
316
+
317
+ question.destroy()
318
+
319
+ entry.destroy()
320
+
321
+ button.destroy()
322
+
323
+ canvas.create_image(320, 245, image=sui)
324
+
325
+ if 0 <= a+D <= 3:
326
+
327
+ again_text = tkinter.Label(text="                           ",fg="red",bg="plum")
328
+
329
+ again_text.place(x=100,y=20)
330
+
331
+ res_text = tkinter.Label(text="あなたの今日の運勢は小吉です。",fg="sienna",bg="plum")
332
+
333
+ res_text.place(x=120, y=20)
334
+
335
+ res_text = tkinter.Label(text="いいじゃん!", bg="plum")
336
+
337
+ res_text.place(x=243, y=425)
338
+
339
+ canvas.delete("all")
340
+
341
+ question.destroy()
342
+
343
+ entry.destroy()
344
+
345
+ button.destroy()
346
+
347
+ canvas.create_image(320, 240, image=moku)
348
+
349
+ button["command"] = btn_click
350
+
351
+
352
+
353
+ root.mainloop()
354
+
355
+
356
+
357
+ ```

1

コメントを受けての追記.コードがあるためコメントではなく回答で

2020/10/30 00:29

投稿

ebal
ebal

スコア62

test CHANGED
@@ -1,3 +1,5 @@
1
+ # 元回答
2
+
1
3
  おそらくイメージしてるのはいわゆるプレースホルダー(下の画像のようなもの)かと思います.
2
4
 
3
5
 
@@ -11,3 +13,89 @@
11
13
 
12
14
 
13
15
  英語ですが,[ここ](https://blog.tecladocode.com/tkinter-placeholder-entry-field/) に綺麗なPlaceholderを作成できるEntryのクラスに関する記事があります.表示してる画像は記事中のコードを実行したもののスクショです.
16
+
17
+
18
+
19
+ ---
20
+
21
+ #追記
22
+
23
+
24
+
25
+ 元記事ではインデントの一部がタブになっていてそのまま実行できないことがありますね.
26
+
27
+ PlaceHolderの座標(右寄せ,左寄せなど)を弄りたいならば記事のクラスをさらに改変する必要がありそうです.
28
+
29
+
30
+
31
+ 取り敢えず参考として上で動かしたコードだけ貼っておきます.(インデントを修正しただけ)
32
+
33
+
34
+
35
+ ```python3import tkinter as tk
36
+
37
+ from tkinter import ttk
38
+
39
+
40
+
41
+
42
+
43
+ class PlaceholderEntry(ttk.Entry):
44
+
45
+ def __init__(self, container, placeholder, *args, **kwargs):
46
+
47
+ super().__init__(container, *args, style="Placeholder.TEntry", **kwargs)
48
+
49
+ self.placeholder = placeholder
50
+
51
+
52
+
53
+ self.insert("0", self.placeholder)
54
+
55
+ self.bind("<FocusIn>", self._clear_placeholder)
56
+
57
+ self.bind("<FocusOut>", self._add_placeholder)
58
+
59
+
60
+
61
+ def _clear_placeholder(self, e):
62
+
63
+ if self["style"] == "Placeholder.TEntry":
64
+
65
+ self.delete("0", "end")
66
+
67
+ self["style"] = "TEntry"
68
+
69
+
70
+
71
+ def _add_placeholder(self, e):
72
+
73
+ if not self.get():
74
+
75
+ self.insert("0", self.placeholder)
76
+
77
+ self["style"] = "Placeholder.TEntry"
78
+
79
+
80
+
81
+
82
+
83
+ root = tk.Tk()
84
+
85
+ style = ttk.Style(root)
86
+
87
+
88
+
89
+ style.configure("Placeholder.TEntry", foreground="#d5d5d5")
90
+
91
+
92
+
93
+ entry = PlaceholderEntry(root, "Sample placeholder")
94
+
95
+ entry.pack()
96
+
97
+
98
+
99
+ root.mainloop()
100
+
101
+ ```