動作環境
Windows10
PyCharm
Python3
起こった現象
tkinter.filedialog.askopenfilename でダイアログを開いた際に、キャンセルを押すとエラーになって、そのままPyCharmが不安定になってします。OSの再起動を何度かやりました。
コード
import tkinter.filedialog
import os
import sys
root = tkinter.Tk()
file_type = [("", "*")]
current_dir = os.getcwd()
root.withdraw()
file_name = tkinter.filedialog.askopenfilename(filetypes=file_type, initialdir=current_dir)
if file_name == "":
sys.exit(1)
current_dir = current_dir.rsplit("\\", 1)[1]
file = "." + file_name.split(current_dir)[1]
print(file)
キャンセルした際に、if file_name == "" の条件に一致して、sys.exit(1)が実行されます。
これをやらないと、キャンセルをした際に、エラーになります。if文をコメントアウトして確認してみて下さい。
追記)半年ぶりにこのページを見て↑のコードを何故載せたのか分からなくなりましたが、↓のコードで書いているように return "break" をすれば、エラーは出なくなります
インスタンスメソッドの場合の例
# クラス内のインスタンスメソッドです。
# ボタンを押した際に、ファイルダイアログが開くメソッドの例です。
def button_action_hoge(self, event):
file_type = [("", "*")]
current_dir = os.getcwd()
file_name = tkinter.filedialog.askopenfilename(
filetypes=file_type, initialdir=current_dir)
if file_name == "":
return "break"
current_dir = current_dir.rsplit("\\", 1)[1]
# file = fileName.split(current_dir)[1]
# file = g_init_data.pathImageFolder + fileName.split(currentDir)[1]
file = "." + file_name.split(current_dir)[1]
return "break"
return "break"の""はボタンの表示が元の状態に戻る魔法のおまじないです。
if file_name == "" のところがないと、PyCharmが固まってしまうくらいの状態になります。