回答編集履歴

2

追記

2018/03/15 01:48

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -37,3 +37,99 @@
37
37
 
38
38
 
39
39
  外してたらスミマセン
40
+
41
+
42
+
43
+ ---
44
+
45
+ 追記:スミマセンやはり外してたようです。
46
+
47
+ よくよくやってみるとTcl()としてもダイアログ/メッセージボックスなどの機能を使うとTkのトップウィンドウが出てくるみたいですね。Tcl/Tkで`wm withdraw`(Tkinterでいうところの`root.withdraw()`はトップウィンドウを見せたくないときの普通のマナーなのかも知れません。
48
+
49
+
50
+
51
+ ダイアログを閉じたとき、トップウィンドウが消えてくれたり消えてくれなかったりするのはtclインタープリタの(内部の?)メインループがまだ動き続けているということではないかと思います。
52
+
53
+
54
+
55
+ 当方Windows10でAnacondaではない所謂普通の(?)Python 3.6.0なので質問者さんの環境での確認はできてないのですが次のようにしたらどうなるでしょう?
56
+
57
+
58
+
59
+ リスト2: withdrawがだめならdestroyしてみたらどうか?
60
+
61
+ ```python
62
+
63
+ import tkinter
64
+
65
+ import tkinter.filedialog
66
+
67
+
68
+
69
+ def fd():
70
+
71
+ root = tkinter.Tk()
72
+
73
+ root.withdraw()
74
+
75
+ foldername = tkinter.filedialog.askdirectory()
76
+
77
+ root.destroy()
78
+
79
+ return foldername
80
+
81
+
82
+
83
+ print(fd())
84
+
85
+ ```
86
+
87
+
88
+
89
+ リスト3: tclインタープリタをアプリ終了時に停止する構造にしてみたらどうか
90
+
91
+
92
+
93
+ ```python
94
+
95
+ import tkinter
96
+
97
+ import tkinter.filedialog
98
+
99
+
100
+
101
+ def fd():
102
+
103
+ # Tkinterのトップウィンドウの処理はメインに委ね
104
+
105
+ # こうした関数ではそれを意識しない
106
+
107
+ foldername = tkinter.filedialog.askdirectory()
108
+
109
+ return foldername
110
+
111
+
112
+
113
+ def main():
114
+
115
+ # アプリのメイン処理
116
+
117
+ # この中からfd()なども呼ぶ
118
+
119
+ foldername = fd()
120
+
121
+ ...
122
+
123
+
124
+
125
+ if __name__ == '__main__':
126
+
127
+ root = tkinter.Tk()
128
+
129
+ root.withdraw()
130
+
131
+ main()
132
+
133
+ root.quit()
134
+
135
+ ```

1

追記

2018/03/15 01:48

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
 
26
26
 
27
- トップレベルウィンドウが必要ない処理を想定しているなら上記のようにTk()のかわりにTcl()を用いたらどうなるでしょうか。Windows10だとこちらでも動きました。
27
+ トップレベルウィンドウが必要ない処理を想定しているなら上記のようにTk()のかわりにTcl()を用いたらどうなるでしょうか。Windows10(Python 3.6.0)だとこちらでも動きました。
28
28
 
29
29
 
30
30