質問編集履歴

5

解決方法、注意点の記述

2019/12/24 04:41

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -361,3 +361,117 @@
361
361
  もしくは、while文を使わないでif文の挙動を何回もできるようにしたいです。
362
362
 
363
363
  もしくはTkinterを使わないでも実装できるやり方を知りたいです。
364
+
365
+
366
+
367
+ #解決コード
368
+
369
+ サブウィンドウを作成し、それを何度も破壊することでメインウィンドウを削除しないでもよくなった。
370
+
371
+ ※回答欄から転載
372
+
373
+
374
+
375
+ ```Python
376
+
377
+ import tkinter
378
+
379
+ from tkinter import messagebox
380
+
381
+
382
+
383
+ # ウインドウ
384
+
385
+ root = tkinter.Tk()
386
+
387
+ root.withdraw()
388
+
389
+
390
+
391
+ def on_start():
392
+
393
+ messagebox.showinfo('', '開始!!!!')
394
+
395
+ # 次にmainloop内から main_proc() 関数を呼ぶ
396
+
397
+ root.after(0, main_proc)
398
+
399
+
400
+
401
+ def main_proc():
402
+
403
+ # ここで設定Windowを Toplevel Widget にて作成
404
+
405
+ global top
406
+
407
+ top = tkinter.Toplevel(root)
408
+
409
+ top.deiconify()
410
+
411
+ top.title(u"調整")
412
+
413
+ top.geometry("250x120")
414
+
415
+ # 以下に 設定画面を作成(省略)
416
+
417
+
418
+
419
+ # Toplevel Widgetが閉じられるときは on_close()関数を呼ぶ
420
+
421
+ top.protocol("WM_DELETE_WINDOW", on_closing)
422
+
423
+
424
+
425
+ def on_closing():
426
+
427
+ # Toplevel Widgetを破棄
428
+
429
+ top.destroy()
430
+
431
+ # 確認用ダイアログを出す
432
+
433
+ onemore = messagebox.askyesno('Adjusts_Onemore', 'もう一度調整しますか?')
434
+
435
+ if onemore:
436
+
437
+ # 再度 mainloop内から main_proc() 関数を呼ぶ
438
+
439
+ root.after(0, main_proc)
440
+
441
+ else:
442
+
443
+ # 完了ダイアログを出す
444
+
445
+ messagebox.showinfo('', '完了!!')
446
+
447
+ # rootを破棄(これでmainloopを抜けるはず)
448
+
449
+ root.destroy()
450
+
451
+
452
+
453
+ # 最初にmainloop内から on_start() 関数を呼ぶ
454
+
455
+ root.after(0, on_start)
456
+
457
+ root.mainloop()
458
+
459
+
460
+
461
+ ```
462
+
463
+ ##注意点
464
+
465
+ commandで関数を指定するときは、
466
+
467
+ command=on_closing()
468
+
469
+ ではなく、
470
+
471
+ command=on_closing
472
+
473
+ と記述する。
474
+
475
+ commandパラメータに渡すのは、「関数」を渡す。
476
+
477
+ 括弧つきで記述すると、その場で関数が実行され、その戻り値がcommandパラメータに渡すという意味になってしまうので、注意が必要。

4

文章を構成しなおした。

2019/12/24 04:41

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- ここに質問の内容を詳しく書いてください。
6
-
7
- (例)pythonでいいえが押されるまで何回も調整しなおすシステムを作っています。
5
+ Pythonでいいえが押されるまで質問システムを作っています。
8
6
 
9
7
  Tkinterを使い何度も分岐をする機能を実装中に以下のエラーメッセージが発生しました。
10
8
 

3

自分なりに直してみたことを追記のソースコードとして追記しました。

2019/12/24 04:28

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -154,6 +154,184 @@
154
154
 
155
155
 
156
156
 
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+ #追記のソースコードここから
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+ import tkinter
178
+
179
+ from tkinter import messagebox
180
+
181
+
182
+
183
+ # ウインドウ
184
+
185
+ root = tkinter.Tk()
186
+
187
+
188
+
189
+
190
+
191
+ # root.withdraw()
192
+
193
+
194
+
195
+
196
+
197
+ def on_start():
198
+
199
+ messagebox.showinfo('', '開始!!!!')
200
+
201
+ # 次にmainloop内から main_proc() 関数を呼ぶ
202
+
203
+ root.after(0, main_proc)
204
+
205
+ # 0秒後にmain_procという関数を呼ぶという意味
206
+
207
+
208
+
209
+
210
+
211
+ def main_proc():
212
+
213
+ # ここで設定Windowを Toplevel Widget にて作成
214
+
215
+ global top
216
+
217
+ top = tkinter.Toplevel(root)
218
+
219
+ top.deiconify()
220
+
221
+ top.title(u"調整")
222
+
223
+ top.geometry("250x120")
224
+
225
+ # 以下に 設定画面を作成(省略)
226
+
227
+ Static1 = tkinter.Label(top, text=u'+か-を入れてください!')
228
+
229
+ Static1.pack()
230
+
231
+ EditBox1 = tkinter.Entry(top)
232
+
233
+ EditBox1.insert(tkinter.END, '+')
234
+
235
+ EditBox1.pack()
236
+
237
+
238
+
239
+ Static2 = tkinter.Label(top, text=u'100単位で数字を入れてください')
240
+
241
+ Static2.pack()
242
+
243
+ EditBox2 = tkinter.Entry(top)
244
+
245
+ EditBox2.insert(tkinter.END, '100')
246
+
247
+ EditBox2.pack()
248
+
249
+
250
+
251
+ button = tkinter.Button(top, text='確定', width='10',command=on_closing())
252
+
253
+ button.pack()
254
+
255
+
256
+
257
+ sign = EditBox1.get()
258
+
259
+ value = EditBox2.get()
260
+
261
+
262
+
263
+ root.mainloop()
264
+
265
+
266
+
267
+ anka = 'm:1' + sign + 'p' + value + '\r\n'
268
+
269
+
270
+
271
+ # 文字列の結合
272
+
273
+ # 相対移動文字列を作る
274
+
275
+ # 関数内関数作ってもいいんじゃね?
276
+
277
+
278
+
279
+ # ser.write(bytes(anka, 'UTF-8'))
280
+
281
+ # ser.write(b'g:\r\n')
282
+
283
+
284
+
285
+ print(anka)
286
+
287
+
288
+
289
+ # Toplevel Widgetが閉じられるときは on_close()関数を呼ぶ
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+ def on_closing():
298
+
299
+ top.destroy()
300
+
301
+ # 確認用ダイアログを出す
302
+
303
+ onemore = messagebox.askyesno('Adjusts_Onemore', 'もう一度調整しますか?')
304
+
305
+ if onemore:
306
+
307
+ # 再度 mainloop内から main_proc() 関数を呼ぶ
308
+
309
+ root.after(0, main_proc)
310
+
311
+ else:
312
+
313
+ # 完了ダイアログを出す
314
+
315
+ messagebox.showinfo('', '完了!!')
316
+
317
+ # rootを破棄(これでmainloopを抜けるはず)
318
+
319
+ root.destroy()
320
+
321
+
322
+
323
+
324
+
325
+ # 最初にmainloop内から on_start() 関数を呼ぶ
326
+
327
+ root.after(0, on_start)
328
+
329
+ root.mainloop()
330
+
331
+
332
+
333
+
334
+
157
335
  ```
158
336
 
159
337
 

2

なんのために、deiconify()を使っているかの追記

2019/10/30 02:46

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -51,6 +51,8 @@
51
51
  root.withdraw()
52
52
 
53
53
  messagebox.showinfo('', '開始!!!!')
54
+
55
+
54
56
 
55
57
 
56
58
 
@@ -132,8 +134,6 @@
132
134
 
133
135
  if OneMore_adjust:
134
136
 
135
- # ここに、メッセージボックスの入れるやつを作る
136
-
137
137
  ajust_moving()
138
138
 
139
139
 
@@ -150,7 +150,7 @@
150
150
 
151
151
  messagebox.showinfo('', '完了!!')
152
152
 
153
- ser.close()
153
+
154
154
 
155
155
 
156
156
 
@@ -170,12 +170,18 @@
170
170
 
171
171
  ###教えていただきたいこと
172
172
 
173
+ 最初と最後は、withdraw()で隠したいです。
174
+
175
+ 関数を実行するときは、表示したいとおもっているため 、
176
+
177
+ deiconify()を使っています。
178
+
179
+
180
+
173
181
  tkinterでタブを削除した後
174
182
 
175
183
  While文内のif文を何度も実行してうまく挙動させるに葉どうしたらいいのか?
176
184
 
177
185
  もしくは、while文を使わないでif文の挙動を何回もできるようにしたいです。
178
186
 
179
-
180
-
181
187
  もしくはTkinterを使わないでも実装できるやり方を知りたいです。

1

教えていただきたいことをコメントを受けて修正させていただきました。

2019/10/30 00:47

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -172,7 +172,9 @@
172
172
 
173
173
  tkinterでタブを削除した後
174
174
 
175
- While文を何度も実行るにどうすればいいのか?
175
+ While文内のif文を何度も実行してうまく挙動させるにどうしたらいいのか?
176
+
177
+ もしくは、while文を使わないでif文の挙動を何回もできるようにしたいです。
176
178
 
177
179
 
178
180