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

回答編集履歴

1

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

2019/10/02 04:47

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -11,4 +11,34 @@
11
11
  if(inifile != ""):
12
12
 
13
13
  ...以下略
14
+ ```
15
+ ---
16
+ **追記しました: 2019-10-02 13:46**
17
+
18
+ グローバル変数を使わない代案を示そうと試みましたが、残念な結果となりました。
19
+ 代案を示せる、と思ったのは私のPython3に関する理解が不足していたためです。どうもすみません。
20
+
21
+ 質問者であるさんharpyさんのもとのコードでは `return _folder` と呼び出し側に返しているのでこれを使うべきかと思い直し、ラムダ式/匿名関数内で`command=lambda: _folder=open_folder(inifile, _folder)` のように記述すれば良いと思ったのですが、確認したところ、そもそもPythonの言語仕様でラムダ式の中に文は書けないので、これは叶わない案でした。
22
+
23
+ ですので、**回答としては旧案に戻ります**。より良い方法があれば私も知りたいですね。
24
+
25
+ ```Python3
26
+ _folder = ""
27
+
28
+ # 引数の_folderは除去
29
+ def open_folder(inifile):
30
+ global _folder
31
+
32
+ if (inifile != ""):
33
+ try:
34
+ _folder = inifile.get("setting","targetdirectory")
35
+ except:
36
+ if(_folder == ""):
37
+ _folder = "C://"
38
+
39
+ _folder = filedialog.askdirectory(initialdir = _folder)
40
+
41
+ ...省略
42
+
43
+ menu_file.add_command(label='処理対象のフォルダを選択する', command= lambda: open_folder(inifile))
14
44
  ```