pysimpleguiのメインウィンドウ・リストボックスにより選択されたデータの詳細欄をサブウィンドウに表示、更新できるようにしたい

実現したいこと

  • pysimpleguiのメインウィンドウ・リストボックスにより選択されたデータのMemo欄をサブウィンドウに表示する
  • サブウィンドウ上でこのMemo欄を更新できるようにする

前提

取り扱った日付(時間)をMemo欄とともに記録していく以下の様なHistDateTime.csvファイルがあります。

HistDateTime.csv

1日付,Memo 22015-06-12 11:06:00,***Memo*** 32016-02-25 13:20:00,***Memo*** 42017-12-07 05:13:00,***Memo*** 52018-09-27 14:39:00,***Memo*** 62019-01-15 21:47:00,***Memo***

この日付(時間)を以下のpysimpleguiのメインウィンドウ・リストボックスに表示します。
メインウィンドウ
リストボックスより日付(時間)選択し、'Detail'ボタンを押下した場合、以下のサブウィンドウを表示、Memo欄を更新して'Update'ボタンを押下した場合、Memo欄が更新されるようにします。
サブウィンドウ

発生している問題・エラーメッセージ

以下のコード❶❷を[0]とした場合、1件目のデータはMemo欄が正常に表示され、更新もできるが、2件目以降は以下のエラーとなります。
同様に[n]の場合、n+1件目以外はエラーとなります。

raise KeyError(key) from err KeyError: 0

該当のソースコード

python

1import PySimpleGUI as sg 2import pandas as pd 3import datetime as dt 4 5df_hstDT = pd.read_csv('HistDateTime.csv', sep=",")6hst=df_hstDT['日付'].astype(str).to_list()7 8Mvt_layout = [[sg.Listbox(values=hst, size=(25, 7), enable_events=True, key='Hist')],9 [sg.Button('Detail', disabled =True), sg.Button('Exit')]]10 11window = sg.Window('ShowHistDetail').Layout(Mvt_layout)12 13while True:14 event, values = window.Read()15 16 if event is None or event == 'Exit':17 break18 19 if event=='Hist':20 window.find_element('Detail').Update(disabled=False)21 22 if event=='Detail':23 DtTm =pd.to_datetime(values['Hist'][0])24 df_Detail =df_hstDT [pd.to_datetime(df_hstDT['日付'])==DtTm]25# コード❶26 DetailMemo = df_Detail['Memo'][0]27 sub_layout = [[sg.Button('UpDate'), sg.Button('Close')],28 [sg.Multiline(key='Memo', default_text=DetailMemo, size=(75,150)) ]]29 sub_window = sg.Window('Detail', sub_layout, finalize=True, size=(600, 300))30 31 while True:32 event, values = sub_window.read()33 34 if event == sg.WIN_CLOSED or event == 'Close':35 break36 37 if event == 'UpDate':38 df_hstDT['Memo'] .mask(pd.to_datetime(df_hstDT['日付'])==DtTm, values['Memo'], inplace=True)39 df_hstDT.to_csv(r'HistDateTime.csv', sep=",", header=True, index=False)40 df_Detail =df_hstDT [pd.to_datetime(df_hstDT['日付'])==DtTm]41# コード❷42 DetailMemo = df_Detail['Memo'][0]43 sub_window['Memo'].update(DetailMemo)44 45 sub_window.close()46 47window.Close()

試したこと

エラーメッセージを検索するなどしたが、解決出来ず。

補足情報(FW/ツールのバージョンなど)

コメントを投稿

0 コメント