素材集めGUIその5
dictの書き方について勉強して直した上で
ver1.0のコードを書き直して動作するかを確かめる
そもそもdictは辞書型」(dictionary)は、「リスト」や「タプル」と同じように
複数の値を要素として管理するデータ構造の一つ。
辞書の書式は、以下のように{}の中に、「キー(Key):値(Value)」を組合せた要素を
もつ構造をとります。要素(値)へのアクセスは、
キーを使って参照するので一つの辞書の中に
同じキーを重複して持たせることはできません。
よって、リストやタプルのように要素の位置を意識することはない
キー(Key)」は後から変更できない性質上、
イミュータブルな型をもつデータを採ります。
「文字列」や「数値」「タプル」などのデータがキーになり得ます。
解説サイトに乗っていた例だと
dict1 = {'a':1, 'b':2, 'c':3} # キーに文字列を指定
のように書く
エラーを起こした今までのコードだと
""""素材名を受け取り、ステージ名を返す""" stage_dict ={'合成コール'}, {'マンガン'}, {'碇石(ていせき)'}, {'RMA70-12'}, {'人工ゲル'}, {'素子結晶'}, {'合金'}, {'中級源岩':['4-6']}, {'半自然溶剤':['9-18']}
になっている
例と比べると確かにおかしい表記になっている・・・
改めて例に習い書き直すと
stage_dict = {'合成コール':['4-6'], 'マンガン':['4-6'], '碇石(ていせき)':['4-6'], 'RMA70-12':['4-6'], '人工ゲル':['4-6'], '素子結晶':['4-6'], '合金':['4-6'], '中級源岩':['4-6'], '半自然溶剤':['9-18']}
辞書からデータを取得する際は、辞書が入った変数の後ろに
[]カッコで囲んだキーを入れることで取得できます。
確認のために
辞書からデータを取得するコードを書いてみる
stage_dict = { '合成コール':['4-4'], 'マンガン':['4-7'], '碇石(ていせき)':['4-8'], 'RMA70-12':['4-9'], '人工ゲル':['S5-7'], '素子結晶':['S5-9'], '合金':['6-12'], '中級源岩':['4-6'], '半自然溶剤':['9-18'] } sozai= stage_dict['RMA70-12'] print('欲しい素材は{}で入手可能です。'.format(sozai))
上記のようにdictを書き直してver1.0に組み込んだコードが
以下の通り
#2022-4-12作成 #ファイル名:素材集め表示GUI_ver1.0 #動作確認日:2022-4-13 import PySimpleGUI as sg sg.theme('LightGreen4') def get_stagename(sozai_name): """"素材名を受け取り、ステージ名を返す""" stage_dict ={'合成コール':['4-4'], 'マンガン':['4-7'], '碇石(ていせき)':['4-8'], 'RMA70-12':['4-9'], '人工ゲル':['S5-7'], '素子結晶':['S5-9'], '合金':['6-12'], '中級源岩':['4-6'], '半自然溶剤':['9-18']} return stage_dict[sozai_name] layout = [ [sg.Text('素材名')], [sg.Combo(values=['合成コール','マンガン', '碇石(ていせき)', 'RMA70-12', '人工ゲル', '素子結晶', '合金', '中級源岩', '半自然溶剤'], default_value="選択してください。",size=(20, 1), key='SOZAI', enable_events=True)], [sg.Text('ステージ名')], [sg.Combo(values=[''], size=(20, 1), key='STAGENAME')], [sg.T('')], [sg.Button('Exit')] ] window = sg.Window('素材集め表示GUI_ver1.0', size=(300, 300)).Layout(layout) while True: event, values = window.read() if event is None or event == 'Exit': break if event == 'SOZAI': sozai = values['SOZAI'] stagename = get_stagename(sozai) window.FindElement('STAGENAME').update(values=stagename) window.close()
次回はステージ名が表示出来たので、ドロップ率、スタミナ消費を載せてみる
出来たら、素材の画面を表示出来るようにと段階を踏んでいく