pythonでcsvファイルで記載した表を読み込み、その値をテキストファイルに表示させる
というものを作成しています。
操作として、
まず、1行目のデータをテキストボックスを用いて表示し、追加したい情報を追加する。
次に、表示ボタンを押した時にその追加した情報を反映させた状態で2行目以降を表示させます。
最後に2行目以降のテキストボックスを編集し、変換ボタンを押して表示しているデータを保持します。
例)
下記に記載のsample.csvを読み込ませると、「りんご,バナナ,メロン」が表示されます。
そのなかの「りんご」を「りんごss」のように追加し表示ボタンを押すと2行目以降のデータの
「いちご」の値も「いちごss」と表示される。
ここまでは出来た。
しかし、最後のテキストボックスの値を編集し保存する方法が分からず困っています。
何か意見を頂ければ幸いです。宜しくお願い致します。
python
1# -*- coding: utf8 -*- 2import csv 3import sys 4from tkinter import * 5from tkinter import ttk 6 7import pandas as pd 8 9data = pd.read_csv('F:\sample.csv') 10# ウィンドウのサイズ 11root2.geometry('1500x800') 12 13root2 = Tk() 14def ContinuedData(from_num, to_num): 15 for column_num in range(from_num, to_num): 16 if column_num == 0: 17 # 期待動作を表示 18 for index_num in range(len(data.columns)): 19 expectedvalue = StringVar() 20 value_textbox = Entry(root2, width=20, textvariable=expectedvalue) 21 value_textbox.insert(END, data.values[column_num][index_num]) 22 value_textbox.place(x=200 + (index_num * 200), y=5 + (column_num * 30)) 23 before_value_list.append(data.values[column_num][index_num]) 24 value_list.append(expectedvalue) 25 else: 26 for index_num in range(len(data.columns)): 27 # 期待動作を表示 28 if not value_list[index_num].get() == before_value_list[index_num]: 29 # 1行目で編集を行った場合 30 if str(before_value_list[index_num]) in str(value_list[index_num].get()): 31 value = value_list[index_num].get()[value_list[index_num].get().find(before_value_list[index_num]):int(value_list[index_num].get().find(before_value_list[index_num]) + len(before_value_list[index_num]))] 32 add_word = value_list[index_num].get().replace(value, '*') 33 expectedvalue = StringVar() 34 value_textbox = Entry(root2, width=20, textvariable=expectedvalue) 35 value_textbox.insert(END, add_word.replace('*', data.values[column_num][index_num])) 36 # expectedvalue.set(add_word.replace('*', data.values[column_num][index_num])) 37 value_textbox.place(x=200 + (index_num * 200), y=5 + (column_num * 30)) 38 value_list.append(expectedvalue) 39 # 1行目で空欄にした場合 40 else: 41 expectedvalue = StringVar() 42 value_textbox = Entry(root2, width=20, textvariable=expectedvalue) 43 value_textbox.insert(END, '') 44 # expectedvalue.set('') 45 value_textbox.place(x=200 + (index_num * 200), y=5 + (column_num * 30)) 46 value_list.append(expectedvalue) 47 # 1行目で変更を行わなかった場合 48 else: 49 expectedvalue = StringVar() 50 value_textbox = Entry(root2, width=20, textvariable=expectedvalue) 51 # expectedvalue.set(data.values[column_num][index_num]) 52 value_textbox.insert(END, data.values[column_num][index_num]) 53 value_textbox.place(x=200 + (index_num * 200), y=5 + (column_num * 30)) 54 value_list.append(expectedvalue) 55 56### tklinterのコマンドを複数入力できるようにする 57def Combine_funcs(*funcs): 58 def combined_func(*args, **kwargs): 59 for f in funcs: 60 f(*args, **kwargs) 61 return combined_func 62ContinuedData(0,1) 63 64# この関数で編集後のデータを表示しようとしている 65def Exchange(value_list): 66 for value in value_list: 67 print(value.get()) 68 69# 1行目のデータを表示 70ContinuedData(0,1) 71continue_button = Button(root2, text=u'表示', width=10, command=lambda:Combine_funcs(ContinuedData(1, len(data.index)), continue_button.place_forget())) 72continue_button.place(x=20,y=40) 73 74exchange_button = Button(root2, text=u'変換', width=10, command=Exchange(value_list)) 75exchange_button.place(x=1300, y=500) 76 77root2.mainloop() 78
<sample.csv>
赤いもの,黄色いもの,緑のもの
りんご,バナナ,メロン
いちご,レモン,すいか
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/04 06:08 編集