質問編集履歴

11

文章を構成しなおした。

2019/12/25 07:28

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -688,6 +688,8 @@
688
688
 
689
689
  #参考URL
690
690
 
691
+ 知らないことを調べた。
692
+
691
693
  [Python の isnumeric() メソッド](https://qiita.com/f0o0o/items/f2f173219be88139589f)
692
694
 
693
695
  [tkinterのEntryにvalidationを実装する part 1 基底クラスを作る。](https://qiita.com/junkmd/items/1623025afb56a8731f8d)

10

参考文献が抜けていたので、追記した。

2019/12/25 07:28

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -508,7 +508,9 @@
508
508
 
509
509
  #回答を基に修正したコード【完成版】
510
510
 
511
-
511
+ 回答を基に必要な動作を加えたコードです。
512
+
513
+ 入力規則などについても教えていただいて、感謝です。
512
514
 
513
515
  ```Python
514
516
 
@@ -682,8 +684,10 @@
682
684
 
683
685
 
684
686
 
685
-
686
-
687
-
688
-
689
687
  ```
688
+
689
+ #参考URL
690
+
691
+ [Python の isnumeric() メソッド](https://qiita.com/f0o0o/items/f2f173219be88139589f)
692
+
693
+ [tkinterのEntryにvalidationを実装する part 1 基底クラスを作る。](https://qiita.com/junkmd/items/1623025afb56a8731f8d)

9

回答コードの追加

2019/12/25 07:26

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -512,6 +512,176 @@
512
512
 
513
513
  ```Python
514
514
 
515
+ import tkinter
516
+
517
+ from tkinter import messagebox
518
+
519
+
520
+
521
+
522
+
523
+ def AjustLight():
524
+
525
+ setting_values = {}
526
+
527
+ top = None
528
+
529
+
530
+
531
+ def Light():
532
+
533
+ # ここで設定Windowを Toplevel Widget にて作成
534
+
535
+ nonlocal top
536
+
537
+
538
+
539
+
540
+
541
+ # Entryへの入力値のValidationコマンド
542
+
543
+ # この中でデータをdictに格納しておく
544
+
545
+ def validation(name, word):
546
+
547
+ # 空か数値以外の入力は不可
548
+
549
+ result = (len(word) == 0) or word.isnumeric()
550
+
551
+ # 問題なければ値をconnectに格納
552
+
553
+ if result:
554
+
555
+ setting_values[name.split('.')[-1]] = word
556
+
557
+
558
+
559
+ return result
560
+
561
+
562
+
563
+ top = tkinter.Toplevel(root)
564
+
565
+ top.deiconify()
566
+
567
+ top.title(u"調整")
568
+
569
+ top.geometry("250x150")
570
+
571
+ top.protocol('WM_DELETE_WINDOW', lambda: root.destroy())
572
+
573
+ vcmd = (top.register(validation), '%W', '%P')
574
+
575
+ Static1 = tkinter.Label(top, text=u'光量の調整が可能です!')
576
+
577
+ Static1.pack()
578
+
579
+ Static2 = tkinter.Label(top, text=u'数字を入れてください')
580
+
581
+ Static2.pack()
582
+
583
+ EditBox1 = tkinter.Entry(top, name='num0', validate='key', validatecommand=vcmd)
584
+
585
+ EditBox1.insert(tkinter.END, '0')
586
+
587
+ EditBox1.pack()
588
+
589
+ EditBox2 = tkinter.Entry(top, name='num1', validate='key', validatecommand=vcmd)
590
+
591
+ EditBox2.insert(tkinter.END, '0')
592
+
593
+ EditBox2.pack()
594
+
595
+ EditBox3 = tkinter.Entry(top, name='num2', validate='key', validatecommand=vcmd)
596
+
597
+ EditBox3.insert(tkinter.END, '0')
598
+
599
+ EditBox3.pack()
600
+
601
+ EditBox4 = tkinter.Entry(top, name='num3', validate='key', validatecommand=vcmd)
602
+
603
+ EditBox4.insert(tkinter.END, '0')
604
+
605
+ EditBox4.pack()
606
+
607
+ button = tkinter.Button(top, text='確定', width='10', command=FinishEvent)
608
+
609
+ button.pack()
610
+
611
+
612
+
613
+ def Save(file):
614
+
615
+ nonlocal setting_values
616
+
617
+ # connectに格納している値をリスト化
618
+
619
+ val = [setting_values[f'num{i}'] for i in range(4)]
620
+
621
+ # print(val)
622
+
623
+ # 上記のリストをファイルに書き込む
624
+
625
+ with open(file, "w") as f:
626
+
627
+ f.write(f'0,{val[0]},{val[1]},{val[2]},{val[3]}')
628
+
629
+ with open(file, 'r') as f:
630
+
631
+ print(f.read())
632
+
633
+ # 意図した値になっているかの確認
634
+
635
+
636
+
637
+ def FinishEvent():
638
+
639
+ # ここでセーブする
640
+
641
+ file_path=r'C:\Users\Desktop\test.txt'
642
+
643
+ Save(file_path)
644
+
645
+ top.destroy()
646
+
647
+ # toplevel wigget(サブウィンドウ)を破壊する
648
+
649
+ ajust_onemore = messagebox.askyesno('Adjusts_Onemore', 'もう一度調整しますか?')
650
+
651
+ # 確認用ダイアログを出す
652
+
653
+ # 調整用のやつ
654
+
655
+ if ajust_onemore:
656
+
657
+ # 再度 mainloop内から Light関数を呼ぶ
658
+
659
+ root.after(0, Light)
660
+
661
+ else:
662
+
663
+ # 完了ダイアログを出す
664
+
665
+ messagebox.showinfo('', '完了!!')
666
+
667
+ root.destroy()
668
+
669
+ # rootを破棄(これでmainloopを抜けるはず)
670
+
671
+
672
+
673
+ root = tkinter.Tk()
674
+
675
+ root.withdraw()
676
+
677
+ root.after(0, Light())
678
+
679
+ root.mainloop()
680
+
681
+ return setting_values
682
+
683
+
684
+
515
685
 
516
686
 
517
687
 

8

修正

2019/12/25 07:23

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -506,10 +506,14 @@
506
506
 
507
507
  ```
508
508
 
509
- #回答を基に修正したコード【その2
509
+ #回答を基に修正したコード【完成版
510
510
 
511
511
 
512
512
 
513
513
  ```Python
514
514
 
515
+
516
+
517
+
518
+
515
519
  ```

7

文章を構成しなおした。

2019/12/25 07:03

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -324,7 +324,7 @@
324
324
 
325
325
 
326
326
 
327
- #回答を基に修正したコード
327
+ #回答を基に修正したコード【その1】
328
328
 
329
329
  このコードを使うことで思った通りの動作をすることが出来た。
330
330
 
@@ -505,3 +505,11 @@
505
505
 
506
506
 
507
507
  ```
508
+
509
+ #回答を基に修正したコード【その2】
510
+
511
+
512
+
513
+ ```Python
514
+
515
+ ```

6

文章を構成しなおした。

2019/12/25 07:00

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -328,9 +328,11 @@
328
328
 
329
329
  このコードを使うことで思った通りの動作をすることが出来た。
330
330
 
331
- 値を入れるボックスをglobal宣言したことで、コールバックした関数内で使えるようになた。
331
+ 値を入れるボックスをglobal宣言したことで、コールバックした関数内で使えるようになりました。
332
+
332
-
333
+ このコードの実装の仕方は、少しいかがなものかと思います。
334
+
333
- コードが少しわかりにくくった気がするため、コードを綺麗にする方法が知りたいです。
335
+ 処理を変えいで綺麗なコードにするやりを教えていだきたいです。
334
336
 
335
337
 
336
338
 

5

文章の修正をしました。

2019/12/25 04:09

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -312,11 +312,7 @@
312
312
 
313
313
  2、サンプルコードを作成した過程(ググった時のキーワードや解決までの考え方など)
314
314
 
315
-
316
-
317
- ######コードを簡潔にする方法
315
+ 3、コードを簡潔にする方法
318
-
319
- 3、コードが冗長になっている気がするので、もっときれいなコーディング方法がありましたら教えていただきたいです。
320
316
 
321
317
 
322
318
 

4

既に出来ていることの記述

2019/12/25 04:04

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -6,6 +6,20 @@
6
6
 
7
7
 
8
8
 
9
+ #既に出来ている機能
10
+
11
+ 1、テキストファイルに上書きする機能
12
+
13
+ 2、Tkinterを使い、何度も同じ動作を繰り返す機能
14
+
15
+
16
+
17
+ この二つが出来ています。
18
+
19
+ 今回は、それらを組み合わせるのが最終目的です。
20
+
21
+
22
+
9
23
  #試したこと
10
24
 
11
25
 

3

回答をもとにした新たなコードの追記

2019/12/25 00:20

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
@@ -1 +1 @@
1
- tkinterで得た情報をテキストファイルに書き込みたい
1
+ tkinterで得た情報を連続して、テキストファイルに書き込みたい
test CHANGED
@@ -311,3 +311,185 @@
311
311
  これらを教えていただきたいです!
312
312
 
313
313
  自力で解決できるようになりたいので!
314
+
315
+
316
+
317
+ #回答を基に修正したコード
318
+
319
+ このコードを使うことで思った通りの動作をすることが出来た。
320
+
321
+ 値を入れるボックスをglobal宣言したことで、コールバックした関数内で使えるようになった。
322
+
323
+ コードが少しわかりにくくなった気がするため、コードを綺麗にする方法が知りたいです。
324
+
325
+
326
+
327
+ ```Python
328
+
329
+ import tkinter
330
+
331
+ from tkinter import messagebox
332
+
333
+
334
+
335
+
336
+
337
+ def AjustLight():
338
+
339
+
340
+
341
+
342
+
343
+ def Light():
344
+
345
+ # ここで設定Windowを Toplevel Widget にて作成
346
+
347
+ global top
348
+
349
+ global EditBox1
350
+
351
+ global EditBox2
352
+
353
+ global EditBox3
354
+
355
+ global EditBox4
356
+
357
+ top = tkinter.Toplevel(root)
358
+
359
+ top.deiconify()
360
+
361
+ top.title(u"調光")
362
+
363
+ top.geometry("250x150")
364
+
365
+ # 以下に 設定画面を作成(省略)
366
+
367
+ Static1 = tkinter.Label(top, text=u'光量の調整が可能です!')
368
+
369
+ Static1.pack()
370
+
371
+ Static2 = tkinter.Label(top, text=u'0-255の間で1単位で数字を入れてください')
372
+
373
+ Static2.pack()
374
+
375
+ EditBox1 = tkinter.Entry(top)
376
+
377
+ EditBox1.insert(tkinter.END, '0')
378
+
379
+ EditBox1.pack()
380
+
381
+ EditBox2 = tkinter.Entry(top)
382
+
383
+ EditBox2.insert(tkinter.END, '255')
384
+
385
+ EditBox2.pack()
386
+
387
+ EditBox3 = tkinter.Entry(top)
388
+
389
+ EditBox3.insert(tkinter.END, '255')
390
+
391
+ EditBox3.pack()
392
+
393
+ EditBox4 = tkinter.Entry(top)
394
+
395
+ EditBox4.insert(tkinter.END, '0')
396
+
397
+ EditBox4.pack()
398
+
399
+
400
+
401
+
402
+
403
+ button = tkinter.Button(top, text='確定', width='10', command=FinishEvent)
404
+
405
+ # command=で入れた関数に()があると、関数がうまく使うことが出来ない。
406
+
407
+ # (正確に言うと、起動したときに実行されてしまうので、ダメ)
408
+
409
+ button.pack()
410
+
411
+
412
+
413
+ root.mainloop()
414
+
415
+
416
+
417
+ def FinishEvent():
418
+
419
+ one = EditBox1.get()
420
+
421
+ second = EditBox2.get()
422
+
423
+ third = EditBox3.get()
424
+
425
+ fourth = EditBox4.get()
426
+
427
+ global connect
428
+
429
+ connect = '0,' + one + ',' + second + ',' + third + ',' + fourth
430
+
431
+
432
+
433
+ path = r"C:\Users\Desktop\test.txt"
434
+
435
+ with open(path, "w") as f:
436
+
437
+ f.write(connect)
438
+
439
+ with open(path, "r") as f:
440
+
441
+ reading = f.read()
442
+
443
+ print(reading)
444
+
445
+
446
+
447
+ top.destroy()
448
+
449
+ # toplevel wigget(サブウィンドウ)を破壊する
450
+
451
+ ajust_onemore = messagebox.askyesno('Adjusts_Onemore', 'もう一度調整しますか?')
452
+
453
+ # 確認用ダイアログを出す
454
+
455
+ # 調整用のやつ
456
+
457
+ if ajust_onemore:
458
+
459
+ # 再度 mainloop内から ajust_moving() 関数を呼ぶ
460
+
461
+ root.after(0, Light)
462
+
463
+ else:
464
+
465
+ # 完了ダイアログを出す
466
+
467
+ messagebox.showinfo('', '完了!!')
468
+
469
+ root.destroy()
470
+
471
+ # rootを破棄(これでmainloopを抜けるはず)
472
+
473
+
474
+
475
+ root = tkinter.Tk()
476
+
477
+ root.withdraw()
478
+
479
+
480
+
481
+ root.after(0, Light())
482
+
483
+
484
+
485
+
486
+
487
+ AjustLight()
488
+
489
+
490
+
491
+ print(connect)
492
+
493
+
494
+
495
+ ```

2

リンクの追加

2019/12/25 00:17

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -8,11 +8,21 @@
8
8
 
9
9
  #試したこと
10
10
 
11
+
12
+
13
+ root.mainloopの場所を変更するということを試しました。
14
+
15
+
16
+
11
- [前回の質問](https://teratail.com/questions/220007)をもとにテキストファイル操作を書きました。
17
+ [前回の質問](https://teratail.com/questions/220007)をしてテキストファイルへの書き込み方法を追記しました。
12
-
18
+
19
+
20
+
13
- しかし、ファイルを操作する動作を関数外に記述すると、動作しない
21
+ しかし、思ったような動作が出来ません
14
-
15
- root.mainloopの場所を3つの変更を試しました。
22
+
23
+
24
+
25
+
16
26
 
17
27
  その結果、
18
28
 

1

リンクの追加

2019/12/24 07:28

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  #試したこと
10
10
 
11
- 前回の質問をもとにテキストファイル操作を書きました。
11
+ [前回の質問](https://teratail.com/questions/220007)をもとにテキストファイル操作を書きました。
12
12
 
13
13
  しかし、ファイルを操作する動作を関数外に記述すると、動作しない。
14
14