回路草案入力フォームその21
前回は
メインウインドウからフォームB(sub_window)を開き
そのフォームBからさらにフォームC(sub2_window)を開いて
というようにしようとしていたが
構造的に複雑になる為Tabで切り替えられるように変更する
なのでTabGroupを使用しTab切り替え実装する
基板作りチェックリストで学んだように
Tabを生成してからTabGroupを設定する
tab1_layout = [フォーム1の内容 ] tab2_layout = [ フォーム2の内容 ] tab3_layout = [フォーム3の内容 ] layout = [ [sg.TabGroup([[sg.Tab('作成フォーム1', tab1_layout), sg.Tab('作成フォーム2', tab2_layout), sg.Tab('作成フォーム3', tab3_layout)]])] ]
実際には
#分類分けフレーム BN_Frame =[ [sg.Radio('モジュール基板', group_id='g1', font=('小塚ゴシック', 15))], [sg.Radio('試作基板', group_id='g1', font=('小塚ゴシック', 15))], [sg.Radio('ホビー用基板', group_id='g1', default=True, font=('小塚ゴシック', 15))], [sg.Radio('実験基板', group_id='g1', font=('小塚ゴシック', 15))], [sg.Radio('書き込みアダプター', group_id='g1', font=('小塚ゴシック', 15))] ] tab1_layout = [ [sg.T('')], [sg.Text('各項目を入力して下さい')], [sg.Text('回路CADの名前'), sg.Input(size=(20,1), key='cad_name'), sg.Text('CADのverも忘れずに記入しよう', text_color='red')], [sg.Text('作成目的'), sg.Input(size=(20,1), key='purpose')], [sg.Frame('分類分け', BN_Frame, title_color='Green', font=('小塚ゴシック', 20), title_location=TITLE_LOCATION_TOP, pad=((150,0),(15,35)), border_width=4)], #3行目 [sg.Button('一時保存', key='-TMP-'), sg.T(' '*30), sg.Button('クリア', key='-CLEAR-')] ] tab2_layout = [ [sg.T('')], [sg.Text('基板名'), sg.Input(size=(30,1), key='Board_name'), sg.Text('通称でも可')], [sg.Text('基板英名'), sg.Input(size=(49,1), key='Board_eng_name'), sg.Text('英名は回路CADで英字必須の為', text_color='red')], [sg.Text('電源供給方法'), sg.Multiline(size=(40,3), key='Power_supply_method')], [sg.Text('電源電圧'), sg.Input(size=(10,1), key='Power-supply_voltage'), sg.Text('[V]')], [sg.Text('基板概要'), sg.Input(size=(20,1), key='Board_outline')], [sg.Text('基板の大きさ'), sg.Text('横'), sg.Input(size=(10,1), key='Horizontal_size'), sg.Text('mm'), sg.Text('縦'), sg.Input(size=(10,1), key='Vertical_size'), sg.Text('mm')], [sg.Text('部品候補名A'), sg.Input(size=(15,1), key='Part_candidate_name_A')], [sg.Text('部品候補名B'), sg.Input(size=(15,1), key='Part_candidate_name_B')], [sg.Text('部品候補名C'), sg.Input(size=(15,1), key='Part_candidate_name_C')], [sg.Text('部品候補名D'), sg.Input(size=(15,1), key='Part_candidate_name_D')], [sg.Text('部品候補名E'), sg.Input(size=(15,1), key='Part_candidate_name_E')], [sg.Text('部品候補名F'), sg.Input(size=(15,1), key='Part_candidate_name_F')], [sg.Text('部品候補名G'), sg.Input(size=(15,1), key='Part_candidate_name_G')], [sg.T('')], [sg.Button('一時保存', key='-TMP2-'), sg.T(' '*30), sg.Button('クリア', key='-CLEAR2-')] ] tab3_layout = [ [sg.T(' ')], [sg.Text('大まかな予算金額'), sg.Input(size=(10,1), key='Rough_budget_amount', default_text='3600'), sg.Text('円(税別)')], [sg.Radio('pdf形式で残す',group_id='g2', font=('小塚ゴシック', 15)), sg.Radio('txt形式で残す', group_id='g2', font=('小塚ゴシック', 15))], [sg.Text('作成年月日(西暦で入力してね)')], [sg.Input(size=(15,1), key='Date_of_creation', default_text='2022-5-19')], [sg.Button('一時保存', key='-TMP3-'), sg.T(' '*30), sg.Button('クリア', key='-CLEAR3-'), sg.Output('出力する', key='-OUTPUT3-')] ] layout = [ [sg.TabGroup([[sg.Tab('作成フォーム1', tab1_layout), sg.Tab('作成フォーム2', tab2_layout), sg.Tab('作成フォーム3', tab3_layout)]])] ]
次回はTabが動作しpickleを使ってオブジェクトを保存出来るかを検証する