前提・実現したいこと
pythonのpysimpleguiを使用してGUIアプリを作成しています。
閉じるボタン押下後、ユーザ情報とパスワードの入力情報をファイルに保持し、次回以降アプリを開く際入力しなくてよい機能を実装しようとした際、問題が発生しました。該当の事象が発生したタイミングは以下の通りです。
・py2appを使用してGUIアプリを作成 ← 閉じるボタンは正常に機能
・distフォルダを圧縮 ← 閉じるボタンは正常に機能
・GoogleDriveにアップロードし、ダウンロードして解凍 ← 閉じるボタンは正常に機能せず
初めて投稿しますので、掲載すべき情報が不足しているかもしれません。その際はご指摘頂けますと幸いです。
解決策が見当たらないので、有識者のお力添えを頂きたく思います。何卒よろしくお願い致します。
発生している問題・エラーメッセージ
OSError: [Errno 30] Read-only file system: 'csv_file_data.csv'
該当のソースコード
import PySimpleGUI as sg from os.path import basename import csv import re import pandas as pd import sys choice_csv_file = [] df_choice_csv_file_wk = pd.read_csv('choice_data.csv',header=0) choice_csv_files_wk = df_choice_csv_file_wk.values.tolist() for choice_csv_file_wk in choice_csv_files_wk: choice_csv_file_aft = str(choice_csv_file_wk).replace("<", '').replace(">", '').replace('["', '').replace('"]', '').replace('[', '').replace(']', '').replace("'", '') choice_csv_file.append(choice_csv_file_aft) df_input_csv_file = pd.read_csv('csv_file_data.csv',header=0) def_data = df_input_csv_file.dropna(how='all').values.tolist() frame1 = [[sg.Radio('1ファイルにシートごとにまとめる', 1, key='-MULTI-SHEET-', default=True)], [sg.Radio('1ファイル1シートにまとめる', 1, key='-ONE-SHEET-')]] frame2 = [[sg.Text('ユーザー名:', size=(9, 1),pad=((5,0),(5,5))), sg.InputText(choice_csv_file[0],size=(12, 1),key='-USER-'),sg.Text('パスワード:', size=(9, 1),pad=((5,0),(5,5))), sg.InputText(choice_csv_file[1],size=(10, 1),key='-PASS-')]] col1 = [[sg.Button('実行')], [sg.Button('終了')]] layout = [[sg.Frame('ログイン情報', frame2)], [sg.Text('ファイル選択', size=(15, 1), justification='right'), sg.InputText('ファイル一覧', enable_events=True,), sg.FilesBrowse('ファイルを追加', key='-FILES-', file_types=(('Excell ファイル', '*.xlsx'),))], [sg.Button('ログをコピー'), sg.Button('ログをクリア')], [sg.Output(size=(100, 5), key='-MULTILINE-')], [sg.Button('入力一覧をクリア')], [sg.Listbox([], size=(100, 10), enable_events=True, key='-LIST-')], [sg.Frame('処理内容', frame1), sg.Column(col1)]] window = sg.Window('エクセルの結合', layout) new_files = [] new_file_names = [] while True: # Event Loop event, values = window.read() if event in (None, '終了'): df_input_csv_file.to_csv('csv_file_data.csv',index=False) user = values['-USER-'] #ログインするアカウントID pwd = values['-PASS-'] #使用するパスワード choice_csv_file = ["<"+str(user)+">","<"+str(pwd)+">"] df_choice_csv_file_wk['choice'] = pd.DataFrame(choice_csv_file) df_choice_csv_file_wk.to_csv('choice_data.csv',index=False) window.close() #ウインドウを消す break if event == '実行': print('処理を実行') print('処理対象ファイル:', new_files) if values['-MULTI-SHEET-']: print('複数シートを1ファイルにまとめる') elif values['-ONE-SHEET-']: print('複数シートを1シートにまとめる') sg.popup('処理が正常終了しました') elif event == 'ログをクリア': print('ログをクリア') window.FindElement('-MULTILINE-').Update('') elif event == 'ログをコピー': window.FindElement('-MULTILINE-').Widget.clipboard_append(window.find_element('-MULTILINE-').Get()) sg.popup('ログをコピーしました') elif event == '入力一覧をクリア': print('入力一覧をクリア') new_files.clear() new_file_names.clear() window['-LIST-'].update('') elif values['-FILES-'] != '': print('FilesBrowse') new_files.extend(values['-FILES-'].split(';')) new_file_names.extend([basename(file_path) for file_path in new_files]) print('ファイルを追加') window['-LIST-'].update(new_file_names) # リストボックスに表示します window.close()
試したこと
・resourcesフォルダにある該当のCSVファイルの権限をどのユーザも 読み/書き できるように変更 → 解決せず
・以下のコマンドでデバッグ実行できるという情報があったので実行 → エラーは発生せず正常終了
/dist/file_update.app/Contents/MacOS/file_update
補足情報(FW/ツールのバージョンなど)
使用言語:python3.9
使用しているライブラリのバージョンは以下の通りです。
Package Version
pandas 1.3.4
pip 21.3.1
py2app 0.26.1
PySimpleGUI 4.55.1
あなたの回答
tips
プレビュー