ボタンをフレームに入れたいと思い
イメージ図を作ってみた
それにともない トップレベルのボタンフレームをクラス化して
ボタンを配置させたい
CTkFrameのMutiple framesを参考にカスタマイズしたものを 作成してコードを載せていきたい
ボタンをフレームに入れたいと思い
イメージ図を作ってみた
それにともない トップレベルのボタンフレームをクラス化して
ボタンを配置させたい
CTkFrameのMutiple framesを参考にカスタマイズしたものを 作成してコードを載せていきたい
2回目のデバッグをやったが結果は
前回と同じ内容のエラーメッセージが出た
なので、map関数の使い方を改めて学ぶ必要がある。
また、map関数とは別のやり方で文字列を抽出する方法を見つけた
条件を満たす行を抽出する方法(ブーリアンインデックス)の中の==とisin()メソッドを使った手法で 特定の文字列を抽出しそれを置換するというもの
def sheet_to_jap(): #シートを読み込み各値を置換する filtered_csv_dir = R'c:\Users\ユーザー名\Desktop\Kicad_create_bom' filtered_csv_filename = 'Soldering iron thermometer.csv' #のちのちは選択したbomファイルに変更する filtered_csv_path = os.path.join(filtered_csv_dir, filtered_csv_filename) df = pd.read_csv(filtered_csv_path, encoding='utf8') #ファイル読み込み print(df['a'].isin(['Generetor', 'Componemt Count', 'Ref'])) print(df['b'] == 'Qnty') print(df['c'] == 'Value') print(df['d'] == 'Cmp name')
という風に書き直して再度デバッグすると
df = pd.read_csv(filtered_csv_path, encoding='utf8') #ファイル読み込み File "parsers.pyx", line 838, in pandas.libs.parsers.TextReader.read_low_memory File "parsers.pyx", line 905, in pandas.libs.parsers.TextReader.read_rows File "parsers.pyx", line 874, in pandas.libs.parsers.TextReader.tokenize_rows File "parsers.pyx", line 891, in pandas.libs.parsers.TextReader.check_tokenize_status File "parsers.pyx", line 2061, in pandas.libs.parsers.raise_parser_error pandas.errors.ParserError: Error tokenizing data. C error: Expected 2 fields in line 6, saw 7 というエラーメッセージが出た
これを解消していく
エラーメッセージの
df["a"] = df["a"].map(bom_word_a_mapping)と
raise KeyError(key) from error KeyError:'a'というのは
「a」という列名が存在しないのでエラーという意味なので
その該当コードを見てみると
bom_word_a_mapping = { 4:"出力", 5:"部品総数", 6:"リファレンス番号" } df["a"] = df["a"].map(bom_word_a_mapping)
になっていて 4:"出力"となっているので
4というのはbomファイルには該当する値は入力されてないので
そこを見てエラーが出たと推測する
なので本来の値である"Generetort"にして様子を見てみる
つまり以下のようなコードに直す
bom_word_a_mapping = { "Generetor":"出力", "Componmt Count":"部品総数", "Ref":"リファレンス番号" } df["a"] = df["a"].map(bom_word_a_mapping)
という風に書き直して再度デバッグしてみる
次回は、デバッグの結果を掲載出来れば
A列からD列までの既定文言の置換をコードにすると
def sheet_read(): #シートを読み込み各値を取得する filtered_csv_dir = R'c:\Users\ユーザー名\Desktop\Kicad_create_bom' filtered_csv_filename = 'Soldering iron thermometer.csv' #のちのちは選択したbomファイルに変更する filtered_csv_path = os.path.join(filtered_csv_dir, filtered_csv_filename) #カラムをあらかじめ指定して読み込めるように準備 col_names = ['c{0:02d}'.format(i) for i in range(30)] df = pd.read_csv(filtered_csv_path, encoding='utf8', names = col_names) #ファイル読み込み bom_word_a_mapping = { 4:"出力", 5:"部品送風", 6:"リファレンス番号" } df["a"] = df["a"].map(bom_word_a_mapping) bom_word_b_mapping = { 6:"数量" } df["b"] =df["b"].map(bom_word_b_mapping) bom_word_c_mapping = { 6:"値" } df["c"] = df["c"].map(bom_word_c_mapping) bom_word_d_mapping = { 6:"部品名" } df["d"] = df["d"].map(bom_word_d_mapping) #csvファイルに書き込み df.to_csv('Soldering iron thermometer_to_japanese.csv')
という風になり実行すると 以下のようなエラーメッセージが出た
例外処理が発生してしまい置換されない
まずはこのエラーの原因究明をしていく
次回は先ほどのエラーの原因を探っていく
今回は。Excelファイルのセルデータの値をピンク色にする方法を載せる
特定の列のセルデータをピンク色の文字にする方法
例えば、ワイドスクワットの運動回数が入っているF列で 説明すると
iter_rowsを使って行ごとに処理を実行 列のセルデータがカラでない場合にピンク色 つまり何かしらの値が入っているセルをピンク色の値に設定する。 最後にファイルを保存し閉じる
import openpyxl from openpyxl.styles import Font def format_wide_sqwat_column_pink(file_path, sheet_name): #Excelファイルの読み込み workbook = openpyxl.load_workbook(file_path) #シート名指定 sheet = workbook[sheet_name] #行ごとに処理を実行 for row in sheet.iter_rows(min_row=6, max_col=6, values_only=True): #ワイドスクワット列つまりF列のセルデータを取得する wide_cell_data = row[5] #列は0-indexedなので 5番目の要素を取得 #ワイドスクワット列のセルデータがカラでない場合にピンク色の文字に設定する if wide_cell_data is not None: cell = sheet.cell(row=row[0], column=5) 列のセル cell.font = Font(color="pink") #ピンク色にする #ファイルを保存 workbook.save(file_path) #ファイルを閉じる workbook.close() #エクセルファイルのパスとシート名を指定 file_path = 'path/****/excel/file.xlsx' sheet_name = 'Sheet1' # 関数を呼び出してF列をピンク文字にする format_wide_sqwat_column_pink(file_path, sheet_name)
CTkMenuBarの実装を目指していたが、 公式のサンプルコード通りにやってもエラーメッセージを吐かれて どうにもこうにも進まないので一旦 メニューバーの実装を諦めて
肝になるbomファイル内の既定文言の置換作業に入る
置換する文言は既定のもので8つ有
追加したい文言では5つを予定している
いつも通りにコードの組み方がサクサク進むようにフローチャートを作成
また、警告メッセージボックスのフローチャートも作成する
今回は既定のものを置換するのにフローチャートを作成しようとすると 長くなるので前半部分と後半部分2つのパートに分けていく
まずは前半部分はA列からD列までのフローチャート
後半はEからG列までのフローチャート
警告メッセージボックスのフローチャートは こんな感じ
これをもとに次回はコードを書いていく