#実現したいこと
以下の
command= lambda: open_folder(inifile,_folder))
で、呼び出した関数の先で_folderに値を入れているのですが、帰ってきたときには値が書き換わっています。
スコープ?の問題だというのはわかったのですが、では、どのようにすればcommandで関数を実行して、そこでの処理結果を得ることができるのでしょうか?
よろしければご教授願います。
python
1#メニューに親メニュー(ファイル)を作成する 2menu_file = tkinter.Menu(root,tearoff=0) 3men.add_cascade(label='設定', menu=menu_file) 4 5#親メニューに子メニュー(処理対象のフォルダを選択する)を追加する 6menu_file.add_command(label='処理対象のフォルダを選択する', command= lambda: open_folder(inifile,_folder))
以上、よろしくお願いいたします。
##追記1
python
1# 設定-フォルダ選択 2def open_folder(inifile,_folder): 3 if(inifile != ""): 4 try: 5 _folder = inifile.get("setting","targetdirectory") 6 except: 7 if(_folder == ""): 8 _folder = "C://" 9 _folder = filedialog.askdirectory(initialdir = _folder) 10 return _folder
open_folderは自作の関数だと思いますが、正しい回答を得るためopen_folder関数のコードを提示しましょう。「帰ってきたときには値が書き換わっています。」とありますが、書き換わっているのではなく、変わっていないのでは?
返信ありがとうございます。
わかりにくくて、失礼しました。
デバッガでリターンの時点までは意図した値に書き換わっているのは確認しました。
以上よろしくお願いいたします。
> デバッガでリターンの時点までは意図した値に書き換わっているのは確認しました。
いえ、呼び出し側の_folder変数が書き換わっていないでしょう?と言う意味でした。
※回答しましたのでご参照ください。
classにまとめるとよろしいかと。add_commandしているステップに返却してもtkinterの場合あまり使い所がないですし。
コメントありがとうございます。
クラスにまとめる方法については別に質問を立てたほうがよろしいでしょうか?
すでに、直接的な回答は提示されているので、そちらをBAにして、別途質問内容が異なる質問を立てるのがよろしいのではないかと私は思います。
かしこまりました。
ありがとうございます。
別に質問を立てて、もしお答えいただけるようでしたら、その時はよろしくお願いいたします。
dodox86さん、とりあえずは動くようになったのでありがとうございます。
当初の目的は果たせました。
回答1件
あなたの回答
tips
プレビュー