デフォルトで空のターゲットを配置し、filebrowseとfolderbrowseに独自のイベントを持たせてください。
この部分は、APIの残りの部分の単純さを破っています。 コードのテキストに含まれておらず、他のボタンとは異なるため、理解しにくいです。 ユーザーの観点からは理由はありません。
ドキュメントで説明されているように、これらのボタンのデフォルトのターゲットは、ボタンの左側にある入力フィールドです。 これらのボタンは、設計上イベントを生成しません。 色と日付の選択もこの動作をします。
ユーザーがファイル、フォルダー、色などの選択を完了したときにイベントを生成する場合は、ターゲット要素にenable_events
パラメーターを設定します。 ターゲットが表示されている必要はないことにも注意してください。 非表示の要素を作成して使用できます。
FolderBrowseボタンのenable_eventsがアクティブになっていることを確認できますか? 次のように、FolderBrowseボタンを選択したときにイベントがあることをプログラムに認識させるのに問題があります。
contlabel_layout = [[sg.Text("Export Container Labels", font=("Roboto", 14))],
[sg.Button(button_text="EXPORT", key="_EXPORT_LABEL_")],
[sg.Text("Options", font=("Roboto", 11))],
[sg.Button(button_text="Open Output", key="_OPEN_LABEL_DEST_")],
[sg.FolderBrowse("Choose Output Folder:", enable_events=True, key="_OUTPUT_DIR_LABEL_",
initial_folder=defaults["labels_export_default"]),
sg.InputText(defaults["labels_export_default"], key="_OUTPUT_DIR_LABEL_INPUT_")]
]
window_simple = sg.Window("ArchivesSpace EAD Export/Cleanup/Upload Program", contlabel_layout)
while True:
event_simple, values_simple = window_simple.Read()
# More code here
if event_simple == "_OUTPUT_DIR_LABEL_":
with open("defaults.json", "w") as defaults_labels:
print(values_simple["_OUTPUT_DIR_LABEL_"])
defaults["labels_export_default"] = values_simple["_OUTPUT_DIR_LABEL_"]
json.dump(defaults, defaults_labels)
defaults_labels.close()
フォルダの参照に有効化イベントを使用しないでください。 上記のように、そしてクックブックでもそう思いますが、これを行うためのテクニックは、ターゲットとして非表示の入力要素を設定することです。 次に、入力要素のイベントを設定します。
混乱させて申し訳ありません。 使用されないように、docstringにメモしておきます。
ボタン自体がターゲットである場合、イベントが生成される可能性があります。 ボタンをターゲットとして設定する方法は、(なし、なし)を使用することです。 しかし、私はそれをしません。 有効化イベントが設定されたターゲットとして非表示の入力要素を使用すると、問題がなくなります。
あなたの前のエントリを参照してください:
ユーザーがファイル、フォルダー、色などの選択を完了したときにイベントを生成する場合は、ターゲット要素でenable_eventsパラメーターを設定します。 ターゲットが表示されている必要はないことにも注意してください。 非表示の要素を作成して使用できます。
PySimpleGUIが進化してきたことを本当に残念に思います。 古いparmは下位互換性のために所定の位置にとどまる必要がありますが、状況を理解するのが困難になる可能性があります。
私はその部分をもっと詳しく読むべきだった、私の悪い。 迅速な対応ありがとうございます!
input要素にenable_eventsを配置すると、非常にエレガントに機能します。
この号を検索して見つけていただき、ありがとうございます。 あなたの側のつぼみに悪いことはありません....これは私にあります:-)
最も参考になるコメント
フォルダの参照に有効化イベントを使用しないでください。 上記のように、そしてクックブックでもそう思いますが、これを行うためのテクニックは、ターゲットとして非表示の入力要素を設定することです。 次に、入力要素のイベントを設定します。
混乱させて申し訳ありません。 使用されないように、docstringにメモしておきます。
ボタン自体がターゲットである場合、イベントが生成される可能性があります。 ボタンをターゲットとして設定する方法は、(なし、なし)を使用することです。 しかし、私はそれをしません。 有効化イベントが設定されたターゲットとして非表示の入力要素を使用すると、問題がなくなります。