ryotankの備考録日記

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

回路草案入力フォームその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を使ってオブジェクトを保存出来るかを検証する