teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

簡易的なコード修正

2020/12/05 04:30

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -7,6 +7,17 @@
7
7
  ウィンドウを2つ以上開きたい場合は Toplevel を用います。
8
8
  詳しくはtkinterでのダイアログの作成方法を調べてみてください。
9
9
 
10
+ ```diff
11
+ # 簡易的な修正方法: set_up 関数内
12
+
13
+ - root = Tk()
14
+ + root = Toplevel()
15
+
16
+ - root.mainloop()
17
+ + root.grab_set()
18
+ + root.wait_window(root)
19
+ ```
20
+
10
21
  Tk() は tcl/tk ライブラリとのやり取りなどの初期化も担当する為、
11
22
  複数回呼ぶ場合は、事前に前の root インスタンスを破棄しなければなりません。
12
23
 

2

変数v1 について、クロージャは参照を保持するので説明を訂正

2020/12/05 04:30

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -25,6 +25,26 @@
25
25
  ローカル変数でも大丈夫です。StringVar や ImagePhoto 等、
26
26
  ウィジェット以外の変数がローカル変数の場合注意。
27
27
 
28
+ 訂正:
29
+ `command=lambda: print("v1=%s" %v1.get()` の lambda は v1 の参照を保持する為、
30
+ 今回のコードではv1変数の生存期間の問題はなしでした。
31
+ 但し、v1を参照しなくなった時点で問題が起こる為、コード変更の際にバグの原因になりやすい
32
+ 明示的に何処かに保持したほうが良いです。
33
+
34
+
35
+ 他の問題
36
+ - finish 関数内の変数 root は未定義
37
+ - Button と Labelframe 内のウィジェットの grid のポジション指定。
38
+  Radiobutton は Labelframe の子ウィジェットなので、Button と同列の配置にはならない
39
+
40
+ ```
41
+ Frame
42
+ Labelframe grid(row=0, column=0)
43
+ Radiobutton grid(row=0, column=0) ※ Labelframe 内でのgrid配置
44
+ Radiobutton grid(row=0, column=1)
45
+ Button grid(row=1, column=0) ※ row=2
46
+ ```
47
+
28
48
  ----
29
49
  関連
30
50
  - [なぜかラジオボタンのセット実行しても違うところに印が入る](https://teratail.com/questions/269973)

1

文章の修正。問題にならない可能性もある、コード次第

2020/12/05 04:26

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -11,7 +11,7 @@
11
11
  複数回呼ぶ場合は、事前に前の root インスタンスを破棄しなければなりません。
12
12
 
13
13
  もう一点は、今回のケースでの直接的な問題ではありませんが
14
- ダイアログ化する場合に問題になる点で、
14
+ ダイアログ化する場合に問題になるかもしれない点で、
15
15
  StringVar の変数 v1 は関数終了時に破棄されます。
16
16
 
17
17
  Python のコード上は