基板作りチェックリストその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()
実際の動作は以下の通り
次回はその3 「記入」ボタンを押すと
選択した分類分けや基板の名前、リスト作成年月日が
PDF上に記載される動作に挑戦する