ryotankの備考録日記

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

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

基板作りチェックguiから基板名入力フォームを開くその2

その2は、基板名入力フォーム(2/2)の基板分類分け選択欄が開くもの


その3は、フォーム2/2の「記入」ボタンを押すと
選択した分類分けや基板の名前、リスト作成年月日が
PDF上に記載される

その4では、「DBへ登録」ボタンを押すと専用DBに入力した項目が登録される
また、その4では、ER図(実体関連図とも呼ばれる)というデータベースの
設計も同時に行っていく

"""
guiから基板名入力フォームを開くその2

基板名入力フォームボタンの「次へ」を押すと
フォーム(2/2)が開き、基板分類分け選択欄が開く

その3は記入ボタンを押すと入力フォームで選択した分類分けや
基板の名前やリスト作成年月日がPDFに記載される

その4はDBへ登録ボタンを押すと専用DBへ記録される

作成日:2022-5-21

動作確認日:2022-5-21 AM4:00
"""

import PySimpleGUI as sg

sg.theme('LightBlue4')

#基板分類分けフレーム
L1 = [
        [sg.Radio('モジュール基板', group_id='g1', font=('小塚ゴシック', 14))],
        [sg.Radio('試作基板', group_id='g1', font=('小塚ゴシック', 14))],
        [sg.Radio('ホビー用基板', group_id='g1', font=('小塚ゴシック', 14))],
        [sg.Radio('書き込みアダプター', group_id='g1', font=('小塚ゴシック', 14))],
        [sg.Radio('実験基板', group_id='g1', font=('小塚ゴシック', 14))]
]

def Form2_window(): #基板名入力フォーム(2/2)ページ目
    pass
    sub2_layout = [
        [sg.Text('基板名入力フォーム(2/2)',  font=('小塚ゴシック', 14))],
        [sg.T('')],
        [sg.Frame('基板分類分け 選択欄', L1, font=('小塚ゴシック', 20))],
        [sg.T('')],
        [sg.Button('記入', key='-ENTER-'), sg.T(' '*33),
        sg.Button('DBへ登録', key='-DB-')]

    ]
    sub2_window = sg.Window('入力フォーム(2/2)', sub2_layout)

    while True:
        sub2_event, sub2_values = sub2_window.read()

        if sub2_event is None:
            break
    sub2_window.close()


# ------ Menu Definition ------ #
menu_def = [    ['&ファイル', ['&開く     Ctrl-O', '&保存       Ctrl-S', '&Properties', '&閉じる']],
                ['編集', ['&印刷プレビュー', '&印刷', ], ],
                ['&Toolbar', ['---', 'Command &1', 'Command &2',
                            '---', 'Command &3', 'Command &4']],
                ['&ヘルプ', ['&オフライン対応ヘルプ', '&ReadMe','---', '&About...']],]

#L6:実装済み基板の外観検査
L6 = [      [sg.Checkbox('半田がついてなかったりボール状の半田になっていないか', font='メイリオ 14', default=False, enable_events=True,)],
            [sg.Checkbox('半田は富士山の形状をしているか', font='メイリオ 15', default=False, enable_events=True)],
            [sg.Checkbox('DIPの挿入ミスで端子が曲がっていないか', font='メイリオ 15', default=False, enable_events=True)],
            [sg.Checkbox('ICが逆に実装されていないか', font='メイリオ 15', default=False, enable_events=True)],
            [sg.Checkbox('カットされたリード部品の足クズが転がっていないか', font='メイリオ 15', default=False)],
            [sg.Checkbox('立っているチップ部品は無いか', font='メイリオ 15', default=False, visible=True)],
            [sg.Checkbox('コネクタの樹脂が溶けていないか', font='メイリオ 15', default=False, enable_events=True)],
            [sg.Checkbox('すべての電源ICの入出力とGND間はショート(短絡)していないか', font='メイリオ 15', default=False, enable_events=True)],
            [sg.Checkbox('電源投入後、熱くなったり臭いを放ったりする部品は無いか', font='メイリオ 15', default=False, enable_events=True)]  
    ]


#L7:電源投入と基本動作判定
L7 =  [     [sg.Checkbox('安定化電源に電流リミッタをかけてあるか', font='メイリオ 15', default=False, enable_events=True),],
            [sg.Checkbox('5Vや3Vの電源バスの電圧が狙い通りか', font='メイリオ 15',default=False, enable_events=True)],
            [sg.Checkbox('電源を何回抜き差ししても正常に動作するか', font='メイリオ 15',default=False, enable_events=True)],
            [sg.Checkbox('リプルはマイコンの電源電圧仕様やADコンバータの分解能より十分小さいか', font='メイリオ 15', default=False, enable_events=True)],
            [sg.Checkbox('Clockの振幅が10ms以下でVDDの80%以上に立ち上がっているか', font='メイリオ 15', default=False, enable_events=True)],
            [sg.Checkbox('Clockの発振周波数の精度は1ppm以下であるか(時計機能を付けている場合のみ)', font='メイリオ 15', default=False, enable_events=True)],
            [sg.Checkbox('AD/DAコンバータの入力信号と変換データの関係は正しいか', font='メイリオ 15', default=False, enable_events=True,)]  
    ]

#チェックボックスを表示するエレメント
checkbox_element = [sg.Checkbox("")]

# ------ GUI Defintion ------ #
L = [      
        [sg.Column([
            [sg.T(''*10)],
            [sg.Menu(menu_def, tearoff=False, pad=(200, 1))],
    
            [sg.Frame('6.実装済み基板の外観検査', L6, font='メイリオ 20')],
            [sg.T(' '*60)],
            [sg.Frame('7.電源投入と基本動作', L7, font='メイリオ 18')],

            [sg.Output(size=(70, 12),font='小塚ゴシック 16')]],  #Menuボタンの確認用でOutputを配置している
                scrollable=True, vertical_scroll_only=True)],
                
            [sg.T(' '*20), sg.Button('一時保存',key='-TempSAVE-', font='小塚ゴシック 16', bind_return_key= True, size=(10,2)),
            sg.T(' '*25), sg.Button('すべて解除', key='-CLEAR-', bind_return_key= True, font='小塚ゴシック 16', size=(10,2)),
            sg.T(' '*40), sg.Button('基板名\n入力フォーム',key='-BOARDinput-form-', font='小塚ゴシック 16',size=(10,2) , button_color='Green')],
            [sg.T(' '*10), sg.Button('PDF出力', key='OUTPUT', font='小塚ゴシック 16', size=(10,2), button_color='red')]
    ]

window = sg.Window('基板作りチェックguiから基板名入力フォームを開くその2', L, )

#イベントループ
while True:
    main_event, value= window.read()  #イベントの読み取り(イベント待ち)
    if main_event in (sg.WIN_CLOSED, '閉じる'):
            break
    print(main_event, value)  #Menuボタンの確認用で配置している

    if main_event == '印刷':   #「印刷」が押されたら
            dn = sg.PopupYesNo('印刷前にプレビューは見ましたか?', title='プレビュー確認', font=18,
                text_color='#FF0', background_color='#777', button_color=('#F00', '#ccc'))
        #yesならそのまま印刷作業に移行

        #Noなら強制的にプレビューに移行

        #チェック項目が入っている箇所のみを取得する

    if main_event == '-TempSAVE-': #ボタンが押された時に
        ceg = checkbox_element.get()  #選択された要素を取得する




    if main_event == '-BOARDinput-form-':    #基板名入力フォームボタンが押されたら
        #サブ画面を開く時に毎回layoutを宣言する
        #エラーが発生せず、何度でも展開できる
        sg.theme('LightGreen5') #テーマの設定
        sub_layout = [
            [sg.Text('基板名 入力欄'), sg.T(' ' *10), sg.Input(key='-Board name-')],
            [sg.T('')],
            [sg.Text('リスト作成日 入力欄'), 
            sg.Input(key='-List creation date-')],
            [sg.T('')],
        [sg.Button('クリア', key='-Clear-'), sg.T(' '*33), 
        sg.Button('次へ', key='-NEXT-')]    #4行目
        ]

        sub_window = sg.Window('基板名入力フォーム (1/2)', layout= sub_layout)

        while True:
            sub_event, sub_value = sub_window.read() #フォームの入力待ち(イベント待ち)

            if sub_event is None:
                break

            elif sub_event == '-NEXT-': #次へが押されたら
                Form2_window()  #フォーム2/2を開く

            elif sub_event == '-Clear-': #クリアボタンが押されたら
                sub_window['-Board name-'].update("")  #基板名をカラにする
                sub_window['-List creation date-'].update("")  #リスト作成年月日をカラにする

            sub_window.close()  #入力フォームを閉じる

#終了処理
        window.close()

実際の動作は以下の通り

基板作りチェックguiから基板名入力フォームを開くその2実際の動作


次回はその3 「記入」ボタンを押すと
選択した分類分けや基板の名前、リスト作成年月日が
PDF上に記載される動作に挑戦する