前提・実現したいこと
GUIに手入力で書き込んだ後に、CSVファイルとして保存、読み込みを行いたい。
現在は、GUIの表示機能のために、no、姓 名、性別、生年月日のリストを入れているが、最終的になくし
手入力で書き込んだ内容を一時的に保存する(歯抜けの状態も保存できる)機能に作り替えたい。
できれば後述のmemory関数の部分の変更だけで済ませたいです。
発生している問題・エラーメッセージ
その行内のリストボックス内に、何も入っていなかったら、何もしない。
その行内のリストボックス内に、新しく書き込んだら、各リスト内にそれぞれ追加する。
その行内のリストボックス内に、書き込み済みなら、各リスト内に上書きする(修正内容の上書きも兼ねてる)。
そういった機能にmemory関数を書き換えたいが、うまくいかない。
現在はinvalid syntaxしかしていない。
該当のソースコード
python
1#tkinterのインポート 2import tkinter as tk 3from tkinter import messagebox 4#生年月日が適切かを確認するため、parseを使用 5from dateutil.parser import parse 6#CSVを読み込むための機能を追加 7import pandas as pd 8# ウィンドウを作成 9root = tk.Tk() 10root.title("Hello, World!") # タイトル 11root.geometry("650x300") # サイズ 12 13行数=3 14 15bt_挿入_削除=[] 16 17tx_no=[] 18tx_姓=[] 19tx_名=[] 20tx_性別=[] 21tx_生年月日=[] 22 23pageid = 0 24no = [1,2,3,4,5,6,7,8,9,10,11] 25姓 = ["渡邊","柳川","清野","根本","阿部","稲田","木内","三宅","石村","本郷","山田"] 26名 = ["沙樹","和臣","菜緒","駿斗","亜依","和徳","喜雄","美南","比呂","香帆","比呂"] 27性別 = ["女","男","女","男","女","男","男","女","男","女","男"] 28生年月日 = ["1988/07/15","1966/09/04","1979/06/08","1992/03/14",\ 29 "1977/04/04","1963/11/06","1972/08/21","1992/11/30",\ 30 "1967/12/07","1965/03/20","1977/04/04"] 31# =================================== 32 33def 画面作成(): 34 y = 50 35 x = 140 36 title=['No.','姓','名','性別','生年月日'] 37 for i in title: 38 obj = tk.Label(text= i) 39 obj.place(x=x, y=y) 40 x += 80 41 y = 80 42 43 for index in range(行数): 44 x = 140 45 obj = tk.Entry(width=10) 46 obj.place(x=x, y=y) 47 tx_no.append(obj) 48 x += 80 49 obj = tk.Entry(width=10) 50 obj.place(x=x, y=y) 51 tx_姓.append(obj) 52 x += 80 53 obj = tk.Entry(width=10) 54 obj.place(x=x, y=y) 55 tx_名.append(obj) 56 x += 80 57 obj = tk.Entry(width=10) 58 obj.place(x=x, y=y) 59 tx_性別.append(obj) 60 x += 80 61 obj = tk.Entry(width=14) 62 obj.place(x=x, y=y) 63 tx_生年月日.append(obj) 64 y += 31 65 66def 削除1(): 67 print('削除1') 68 削除(0) 69 70def 削除2(): 71 print('削除2') 72 削除(1) 73 74def 削除3(): 75 print('削除3') 76 削除(2) 77 78 79def 削除(index): 80 global pageid 81 num = pageid 82 if( var.get() == True): 83 del no[num] 84 del 姓[num] 85 del 名[num] 86 del 性別[num] 87 del 生年月日[num] 88 else: 89 no.insert(num, '') 90 姓.insert(num, '') 91 名.insert(num, '') 92 性別.insert(num, '') 93 生年月日.insert(num, '') 94 clear() 95 画面表示() 96 97def 画面作成_ボタン(): 98 func= [削除1,削除2,削除3] 99 y = 78 100 for index in range(行数): 101 x = 50 102 obj = tk.Button(width=10,text='挿入',command = func[index]) 103 obj.place(x=x, y=y) 104 bt_挿入_削除.append(obj) 105 y += 30 106 107 Clear_button = tk.Button(root,text='クリア',command = clear) 108 Clear_button.place(width=50,x=25,y=250) 109 110 Read_button = tk.Button(root,text='読込',command = btn_read) 111 Read_button.place(width=50,x=130,y=250) 112 113 Save_button = tk.Button(root,text='保存',command = btn_save) 114 Save_button.place(width=50,x=200,y=250) 115 116 Prev_button = tk.Button(root,text='前ボタン',command = 前ページ) 117 Prev_button.place(width=50,x=330,y=250) 118 119 Next_button = tk.Button(root,text='次ボタン',command = 次ページ) 120 Next_button.place(width=50,x=400,y=250) 121 122 123#エントリーの表示 124def 画面表示(): 125 global pageid 126 for index in range(行数): 127 if((index+pageid) >= len(no)) : return 128 tx_no[index].insert(tk.END,no[index+pageid]) 129 tx_姓[index].insert(tk.END,姓[index+pageid]) 130 tx_名[index].insert(tk.END,名[index+pageid]) 131 tx_性別[index].insert(tk.END,性別[index+pageid]) 132 tx_生年月日[index].insert(tk.END,生年月日[index+pageid]) 133 134def Memory(): 135 global pageid 136 for index in range(行数): 137 if not tx_no[index].get() and not tx_姓[index].get() and not tx_名[index].get() and not tx_性別[index].get() and not tx_生年月日[index].get(): 138 print("作業せず") 139 return 140 else: 141 for index in range(行数): 142 if tx_no[index].get(): 143 no[index+pageid] = tx_no[index].get() 144 else: 145 return 146 147 if tx_姓[index].get(): 148 姓[index+pageid] = tx_姓[index].get() 149 else: 150 return 151 152 if tx_名[index].get(): 153 名[index+pageid] = tx_名[index].get() 154 else: 155 return 156 157 if tx_性別[index].get(): 158 性別[index+pageid] = tx_性別[index].get() 159 else: 160 return 161 162 if tx_生年月日[index].get(): 163 生年月日[index+pageid] = tx_生年月日[index].get() 164 else: 165 return 166 167#def check_content(): 168 169# =================================== 170 171#エントリーの全消去 172def clear(): 173 for index in range(行数): 174 tx_no[index].delete(0,tk.END) 175 tx_姓[index].delete(0,tk.END) 176 tx_名[index].delete(0,tk.END) 177 tx_性別[index].delete(0,tk.END) 178 tx_生年月日[index].delete(0,tk.END) 179 180#読み込み 181def btn_read(): 182 df = pd.read_csv('test2.csv', encoding='shift_jis',header=None) 183 no.clear() 184 姓.clear() 185 名.clear() 186 性別.clear() 187 生年月日.clear() 188 189 for i in range(len(df)): 190 no.append(str(df.iloc[i, 0])) 191 姓.append(str(df.iloc[i, 1])) 192 名.append(str(df.iloc[i, 2])) 193 性別.append(str(df.iloc[i, 3])) 194 生年月日.append(str(df.iloc[i, 4])) 195 clear() 196 index=0 197 画面表示() 198 199#保存 200def btn_save(): 201 with open('test.csv', mode='w') as file: 202 file.write("No,姓,名,性別,生年月日\n") 203 for index in range(len(no)): 204 s = str(no[index]) + "," + str(姓[index])+ "," + \ 205 str(名[index]) + "," + str(性別[index]) + "," + str(生年月日[index]) + "\n" 206 file.write(s) 207 208def 前ページ(): 209 global pageid 210 print("btn_prev:s:", no) 211 Memory() 212 if (pageid-3) <0: 213 messagebox.showerror('エラー', 'これ以上は前に戻れません') 214 print("これ以上は前に戻れません") 215 return 216 #if check_content(): 217 #return 218 clear() 219 pageid -= 3 220 画面表示() 221 print("btn_prev:e:", no) 222 223def 次ページ(): 224 global pageid 225 print("btn_next:s:", no) 226 print(pageid) 227 Memory() 228 #if check_content(): 229 #return 230 clear() 231 pageid+=3 232 画面表示() 233 print("btn_next:e:", no) 234 print(pageid) 235 236def change(): 237 for index in range(行数): 238 if(var.get() == True): 239 print('削除') 240 bt_挿入_削除[index].config(text='削除') 241 else: 242 print('挿入') 243 bt_挿入_削除[index].config(text='挿入') 244 245ar = tk.BooleanVar() 246t_btn = tk.Checkbutton(variable=var, text="挿入 / 削除",command = change) 247t_btn.place(x=40, y=50) 248 249# =================================== 250 251画面作成() 252画面作成_ボタン() 253画面表示() 254root.mainloop( ) 255
試したこと
memory部分を変更して、目的とする機能を追加したいが思いつかない。
python
1def Memory(): 2 global pageid 3 for index in range(行数): 4 if not tx_no[index].get() and not tx_姓[index].get() and not tx_名[index].get() and not tx_性別[index].get() and not tx_生年月日[index].get(): 5 print("作業せず") 6 return 7 else: 8 for index in range(行数): 9 if len(no) >= no[index+pageid] 10 no[index+pageid] = tx_no[index].get() 11 else: 12 no[index+pageid].append(tx_no[index]) 13 14 for index in range(行数): 15 if len(姓) >= 姓[index+pageid] 16 姓[index+pageid] = tx_姓[index].get() 17 else: 18 姓[index+pageid].append(tx_姓[index]) 19 20 for index in range(行数): 21 if len(名) >= 名[index+pageid] 22 名[index+pageid] = tx_名[index].get() 23 else: 24 名[index+pageid].append(tx_名[index]) 25 26 for index in range(行数): 27 if len(性別) >= 性別[index+pageid] 28 性別[index+pageid] = tx_性別[index].get() 29 else: 30 性別[index+pageid].append(tx_性別[index]) 31 32 for index in range(行数): 33 if len(生年月日) >= 生年月日[index+pageid] 34 生年月日[index+pageid] = tx_生年月日[index].get() 35 else: 36 生年月日[index+pageid].append(tx_生年月日[index])
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/17 13:26