回答編集履歴

1

代案(が失敗したのを)追記

2019/10/02 04:47

投稿

dodox86
dodox86

スコア9183

test CHANGED
@@ -25,3 +25,63 @@
25
25
  ...以下略
26
26
 
27
27
  ```
28
+
29
+ ---
30
+
31
+ **追記しました: 2019-10-02 13:46**
32
+
33
+
34
+
35
+ グローバル変数を使わない代案を示そうと試みましたが、残念な結果となりました。
36
+
37
+ 代案を示せる、と思ったのは私のPython3に関する理解が不足していたためです。どうもすみません。
38
+
39
+
40
+
41
+ 質問者であるさんharpyさんのもとのコードでは `return _folder` と呼び出し側に返しているのでこれを使うべきかと思い直し、ラムダ式/匿名関数内で`command=lambda: _folder=open_folder(inifile, _folder)` のように記述すれば良いと思ったのですが、確認したところ、そもそもPythonの言語仕様でラムダ式の中に文は書けないので、これは叶わない案でした。
42
+
43
+
44
+
45
+ ですので、**回答としては旧案に戻ります**。より良い方法があれば私も知りたいですね。
46
+
47
+
48
+
49
+ ```Python3
50
+
51
+ _folder = ""
52
+
53
+
54
+
55
+ # 引数の_folderは除去
56
+
57
+ def open_folder(inifile):
58
+
59
+ global _folder
60
+
61
+
62
+
63
+ if (inifile != ""):
64
+
65
+ try:
66
+
67
+ _folder = inifile.get("setting","targetdirectory")
68
+
69
+ except:
70
+
71
+ if(_folder == ""):
72
+
73
+ _folder = "C://"
74
+
75
+
76
+
77
+ _folder = filedialog.askdirectory(initialdir = _folder)
78
+
79
+
80
+
81
+ ...省略
82
+
83
+
84
+
85
+ menu_file.add_command(label='処理対象のフォルダを選択する', command= lambda: open_folder(inifile))
86
+
87
+ ```