回答編集履歴
3
簡易的なコード修正
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 について、クロージャは参照を保持するので説明を訂正
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
文章の修正。問題にならない可能性もある、コード次第
answer
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
複数回呼ぶ場合は、事前に前の root インスタンスを破棄しなければなりません。
|
12
12
|
|
13
13
|
もう一点は、今回のケースでの直接的な問題ではありませんが
|
14
|
-
ダイアログ化する場合に問題になる点で、
|
14
|
+
ダイアログ化する場合に問題になるかもしれない点で、
|
15
15
|
StringVar の変数 v1 は関数終了時に破棄されます。
|
16
16
|
|
17
17
|
Python のコード上は
|