ryotankの備考録日記

ryotankの備考録日記

趣味の電子工作についての備考録などなど

減量管理入力補助GUI その20

ボタンをフレームに入れたいと思い

イメージ図を作ってみた

toplevel_btn_frameのイメージ図

それにともない トップレベルのボタンフレームをクラス化して

ボタンを配置させたい

CTkFrameのMutiple framesを参考にカスタマイズしたものを 作成してコードを載せていきたい

KIcad部品表自由追加GUIその9

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 というエラーメッセージが出た

置換するbtnの動作確認その5のエラーメッセージキャプチャ

これを解消していく

BOM日本語変換その8

エラーメッセージの

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)

という風に書き直して再度デバッグしてみる

次回は、デバッグの結果を掲載出来れば

Kicad部品表自由追加GUIその7

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')
        

という風になり実行すると 以下のようなエラーメッセージが出た

置換するbtnの動作確認その4のエラーメッセージキャプ

例外処理が発生してしまい置換されない

まずはこのエラーの原因究明をしていく

次回は先ほどのエラーの原因を探っていく

Kicad部品表自由追加GUIその6

前半部分のA列からD列までを読み取るが

そもそもA列の4行目を正しく読み取れるか疑問なので

初めにA4の値を取得出来るかを試す

また読み込むのがCSVファイルなので openpyxlは使えない

import pandas as pd

'filename' = 'ファイルまでのフルパス'
df = pd.read_csv, "filename"

csvが読み込まれるコード

次は、指定したセルや行を取得する方法

"at"で行ラベルや列ラベルを指定 "iat"で行番号、列番号を指定

次回は、上記の事を踏まえてA4の値を取得するコードや

A列からD列までの値を取得するコードを作成していく

減量管理入力補助GUI その19

今回は。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)

Kicad部品表自由追加GUIその5

CTkMenuBarの実装を目指していたが、 公式のサンプルコード通りにやってもエラーメッセージを吐かれて どうにもこうにも進まないので一旦 メニューバーの実装を諦めて

肝になるbomファイル内の既定文言の置換作業に入る

置換する文言は既定のもので8つ有

追加したい文言では5つを予定している

いつも通りにコードの組み方がサクサク進むようにフローチャートを作成

また、警告メッセージボックスのフローチャートも作成する

今回は既定のものを置換するのにフローチャートを作成しようとすると 長くなるので前半部分と後半部分2つのパートに分けていく

まずは前半部分はA列からD列までのフローチャート

決められた単語を置換する通常処理前半部

後半はEからG列までのフローチャート

決められた単語を置換する通常処理後半部分

このフローチャートは減量管理補助GUIにも使えそう・・・

警告メッセージボックスのフローチャートは こんな感じ

置換実行ボタンについてのフローチャート

これをもとに次回はコードを書いていく