ryotankの備考録日記

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

アリンコス部品管理その1

DBの事がなんとか掴めてきたので新しいデータベースに
チャレンジしようと思う

これまでは、Excelでロボットサークル時代に余った部品の管理をして
いたが、これもPythonで管理、操作出来る様にする


DBはMySQLというものを使ってみようと思う

SQLite3よりは、より高速で細かいデータ登録が
出来るみたい。。。


例によってイメージ図が完成したので

プログラム概要とおおまかな画面レイアウト、
MySQLDBへの登録処理イメージの3つに分けて掲載する

f:id:ryotank:20211120131610p:plain
アリンコス部品管理_プログラム概要
f:id:ryotank:20211120131644p:plain
アリンコス部品管理 画面レイアウト
f:id:ryotank:20211120131718p:plain
アリンコス部品管理_MySQLDB登録処理

これに沿ってまずはフォーム画面を作り込み、
その後、MySQLでデータベースを構築していく

その後に、ボタン処理機能の実装という流れになるかな

その2では、画面レイアウト用に加工したものを掲載する予定

コンデンサ容量換算の作成その1

作成目的としては、
回路設計際に、ネットに接続してわざわざ容量換算を
計算する事が面倒である

欲しい時にプロバイダーがメンテナンス中や
wifiルーターが落ちた時などに不便である為だ。

換算アプリのポイント


  • コードを「xyz」とした場合、静電容量はxy*10^z[pF]になる
  • 例えばコードが223であった場合、
  • 静電容量は22*10^3[pF]=22000[pF]=22[nF]となる

(10^-6)でμF
(10^-9)でnF
(10^-12)でpFと換算出来るようにしたい

いつものごとく
アプリのイメージ図

イメージ図を画面レイアウト用に加工したもの

を作成していく

これが出来ればLEDの電流制限抵抗算出アプリも作るか・・

工具管理GUIその7

前回テーブル(その6参照>>
beta-boostcircit.hatenablog.com

<<)を作って満足して終わったが
内容までは確認できていないので
db用のファイルを閲覧できるソフト(DB Browser for SOLite)を使い

実際にプログラム通りの内容で
記載できているか確認する


もし出来ていれば工具管理に必要な情報を
網羅したdbを作るコードを作成していく


またdbボタンをクリックして専用のDBを構築するコードも書く

dbのイメージ図をしっかりと作る必要有

とりえあずは、データベース関連のものは、
チェックリストアプリのフォルダ直下に
チェックリストDBダミーというフォルダで格納していく事にした

基板作りチェックリストその15

列レイアウト作成がうまく出来ないという事だったが

それはGUIのlayoutの[]部分の終わりを
閉じていなかった事

凡ミスに悩まされた2週間だった・・・
コードを書いたら小休止は必要やね・・


また今後PySimpleGuiのレイアウトでよく使うsg.Columnの箇所も載せておく

frame_in_column = sg.Column([[frame5],
                             [frame6],
                             [frame7]
	],
	scrollable=True, vertical_scroll_only=True)

と記載したのでスクロールバーがTrueに設定した事で
スクロールバーが表示出来、vertical_scroll_only=Trueにし
縦のスクロールバーが表示出来た。

いつかは横のスクロールバー表示にも調整してみよう

さて次回のチェックリストその16は
基板名入力フォームのフォーム画面を完成させたい

回路草案入力フォームその10

フォーム2ページと3ページ目にクリアボタン実装したが
うまく出来なかった

その時の失敗コードを晒す

def Form2_window():   #フォーム2/3
    pass
    sub_layout = [    [sg.T(' '*18), sg.Text('各項目を入力して下さい', 
                                font='小塚ゴシック17')],
                      [sg.Text('基板名', font='小塚ゴシック17'), 
                       sg.Input(key='-Board name-')],  #1行目
                      [sg.T(' ')],  #空白を挿入
                      [sg.Text('基板の英名', font='小塚ゴシック17'), 
                       sg.Input(), sg.Text('英名は回路CADで英字必須',
                         font='小塚ゴシック17', text_color='blue')],  #2行目
                      [sg.T(' ')],  #空白を挿入
                      [sg.Text('部品構成', font='小塚ゴシック17'), 
                       sg.Multiline(size=(40,20), 
                       key='-Parts composition-')],  #3行目
                      [sg.T(' ')],
                      [sg.Button('一時保存', font='小塚ゴシック17'), sg.T(' '*26), 
                       sg.Button('クリア', font='小塚ゴシック17',key='-Clear2-'),
                       sg.T(' '*24), sg.Button('次へ移動', font='小塚ゴシック17', 
                       key='-Second-',button_color='green')]  #4行目
    ]

sub_window = sg.Window('回路草案入力フォーム(2/3)', layout=sub_layout)
    
    while True:
                 sub_events, sub_values = sub_window.read()
            
                 if sub_events is None:
                    break
                
                 elif sub_events == '-Second-':  #「次へ移動」が押されたら
                    Form3_window()  #フォーム3/3を開く
                
                 elif sub_events =='-Clear2-':   #「クリア」が押されたら
                   #sub_windowの入力項目を空にする
                    sub_window['-Board name-'].update("")  #基板名を空に
                    sub_window['-Board English name-'].update("")  #基板英名を空に
                    sub_window['-Parts composition-'].update("")   #部品構成を空に  
                    
    sub_window.close()  #フォーム2/3を閉じる
                
    
def Form3_window():    #フォーム3/3(フォーム最後のページ)
    pass
    sub2_layout = [ 
                    [sg.T(' '*18), sg.Text('各項目を入力して下さい', 
                      font='小塚ゴシック17')],
                    [sg.Text('大まかな予算金額', key='-Budget amount-', 
                      font='小塚ゴシック17'), 
                     sg.Input(size=(20,2)), sg.Text('円(税別)')], #1行目
                    [sg.T(' ')],
                    [sg.Radio('pdfデータで残す', group_id='a1', font='小塚ゴシック17'),
                     sg.Radio('txtデータで残す', group_id='a1',font='小塚ゴシック17')], #2行目
                    [sg.Text('作成年月日(西暦で入力して)', key='-Date of creation-', 
                     font='小塚ゴシック17'), 
                     sg.Input(size=(20,2), pad=(20,10))], #3行目
                    [sg.Button('一時保存', font='小塚ゴシック17'), sg.T(' '*20), 
                     sg.Button('クリア', font='小塚ゴシック17', key='-Clear3-'),
                         sg.T(' '*17), sg.Button('出力', font='小塚ゴシック17', 
                     button_color='Green')]
]

    sub2_window = sg.Window('回路草案入力フォーム(3/3)', layout=sub2_layout, 
          size=(500,250))

    while True :
                    sub2_events, sub2_values =sub2_window.read()
            
                    if sub2_events is None:
                        break
                        
                    elif sub2_events == '-Clear3-':  #「クリア」が押されたら
                        #sub2_windowの各入力項目を空にする
                        sub2_window['-Budget amount-'].update("")    #予算金額を空に
                        sub2_window['-Date of creation-'].update("") #作成年月日を空に
                        
    sub2_window.close() #フォーム3/3を閉じる
                    
f:id:ryotank:20211119094138g:plain
フォーム2クリアボタン失敗
f:id:ryotank:20211119094218g:plain
フォーム3クリアボタン失敗

では何故失敗したのか

それは、
sg.Text(テキストを表示する)にkeyイベントを発生させていたからである

なのでsg.Input(入力をする)所にkeyイベントを付けて
入力された項目を空にするというコードに書き直した

次回は、修正したコードを載せ、一連の動作をのっける予定

BOM日本語変換その7

GUIのイメージ図を一新したので掲載する

こんな感じになった

f:id:ryotank:20211118232750p:plain
追加GUIイメージ図

いつものように
画面レイアウト用に加工したのがこちら

f:id:ryotank:20211118232840p:plain
GUIイメージ図 画面レイアウト用

これに
また、追加事項として
H6に型名(品番)
I6に販売コード
J6にメーカ名
K6に購入個数
L6に値段(円)もしくはドル
M6に小計
N6に備考
という文言を追加したい リストBox形式で

ちまちま実装するかな

BOM日本語変換その6

前回は、置換文字を7つ全て日本語に出来たので

今回は別名でファイルを保存したい

でも元ファイルは修正などの為に残しておきたいので
ファイルをコピーして後ろにSC1602BS_modue日本語訳と明記して保存したい

つまり
SC1602BS_modue日本語訳.csvという形で保存されるように

ファイルをコピーするには、shutil.copy()関数を用いる

ポイントは、
コピー元を第一引数stcに、コピー先を第二引数dstに指定する事

返り値は新しく作成したファイルのパス(道順)

別名でコピーするには、
第二引数dstに新しいファイル名を指定する

import shutil

shutil.copy('SC1602BS_modue.csv', 'SC1602BS_modue日本語訳.csv')

shutil.move()関数を使うと、指定したファイルやフォルダを別の場所に移動する。
移動元と移送先の引数設定はcopy()メソッドと同様。

指定した移動先が既に存在しているディレクトリの場合は、
ファイルはそのディレクトリの内部に移動されます。
移動先が既に存在しているがディレクトリでない場合は、
ファイル名を変えて指定のフォルダへ移動されます。

#ファイルを名前を変えて指定フォルダへ移動
import shutil

shutil.move('./SC1602BS_modue.csv', 'SC1602BS_modue日本語訳.csv')

という形にしていく

また、追加事項として
H6に型名(品番)
I6に販売コード
J6にメーカ名
K6に購入個数
L6に値段(円)もしくはドル
M6に小計
N6に備考
という文言を追加したい
なので指定セルに文字列を書き込みをするという処理を調べる

あとGUIのイメージ図を更新したので
それを載せる

GUIのレイアウト用の画像も作る

時間かかりそうだぁ・・