在 PySimpleGUI 中:如何根据用户在另一个 Drop 对象中的选择来设置 Drop 对象的值?
In PySimpleGUI: How to set the values of a Drop object based on the user's selection in another Drop object?
例如,我有两个 Drop 对象下拉列表。第一个用户可以从 OPTIONS_CHOICE 中选择,第二个基于用户在 OPTION_CHOICE 中的选择。 IE。如果第一个下拉列表中的用户 select 'Geometric Asian',则只有 ['Closed Form'、'Monte Carlo'] 可供选择。
import sys
import PySimpleGUI as sg
OPTIONS_CHOICE = ['European', 'American', 'Geometric Asian', 'Arithmetic Asian', 'Geometric Basket', 'Arithmetic Basket']
methodology = {
'European' : ['Black Scholes', 'Binominal Tree'],
'American' : ['Binominal Tree'],
'Geometric Asian' : ['Closed Form', 'Monte Carlo'],
'Arithmetic Asian' : ['Monte Carlo', 'Monte Carlo with Control Variate'],
'Geometric Basket' : ['Closed Form', 'Monte Carlo'],
'Arithmetic Basket' : ['Monte Carlo', 'Monte Carlo with Control Variate'],
}
option_layout = [
[sg.Text('Step 1: Select an Option Type', background_color='darkseagreen')],
[sg.Text('Option Type:', background_color='darkseagreen'), sg.Drop(values=OPTIONS_CHOICE, default_value = 'European', auto_size_text=True, enable_events=True, key='option_type')],
[sg.Text('Step 2: Select a Methodology', background_color='darkseagreen')],
[sg.Text('Methodology:', background_color='darkseagreen'), sg.Drop(values=option_choice, auto_size_text=True)]
]
iv_layout = [[sg.Text('This is inside tab 5')],
[sg.Input(key='-in4-')]]
layout = [[sg.TabGroup([[sg.Tab('Option Value', option_layout, background_color='darkseagreen', key='-mykey-'),
sg.Tab('Implied Volatility', iv_layout)]], key='-group1-', tab_location='top', selected_title_color='purple')],
[sg.Button('Compute')]]
window = sg.Window('Option Calculator', layout,
default_element_size=(12, 1))
while True:
event, values = window.read()
sg.popup_non_blocking(event, values)
print(event, values)
if event == sg.WIN_CLOSED: # always, always give a way out!
break
print(event, values)
window.close()
在事件循环中发生第一个 Drop 事件时更新第二个 Drop 元素。
import sys
import PySimpleGUI as sg
OPTIONS_CHOICE = ['European', 'American', 'Geometric Asian', 'Arithmetic Asian', 'Geometric Basket', 'Arithmetic Basket']
methodology = {
'European' : ['Black Scholes', 'Binominal Tree'],
'American' : ['Binominal Tree'],
'Geometric Asian' : ['Closed Form', 'Monte Carlo'],
'Arithmetic Asian' : ['Monte Carlo', 'Monte Carlo with Control Variate'],
'Geometric Basket' : ['Closed Form', 'Monte Carlo'],
'Arithmetic Basket' : ['Monte Carlo', 'Monte Carlo with Control Variate'],
}
default1 = OPTIONS_CHOICE[0]
option_choice = methodology[default1]
default2 = option_choice[0]
option_layout = [
[sg.Text('Step 1: Select an Option Type', background_color='darkseagreen')],
[sg.Text('Option Type:', background_color='darkseagreen'),
sg.Drop(values=OPTIONS_CHOICE, default_value = default1, auto_size_text=True, enable_events=True, key='option_type')],
[sg.Text('Step 2: Select a Methodology', background_color='darkseagreen')],
[sg.Text('Methodology:', background_color='darkseagreen'),
sg.Drop(values=option_choice, default_value = default2, auto_size_text=True, key='option_value')]
]
iv_layout = [[sg.Text('This is inside tab 5')],
[sg.Input(key='-in4-')]]
layout = [[sg.TabGroup([[sg.Tab('Option Value', option_layout, background_color='darkseagreen', key='-mykey-'),
sg.Tab('Implied Volatility', iv_layout)]], key='-group1-', tab_location='top', selected_title_color='purple')],
[sg.Button('Compute')]]
window = sg.Window('Option Calculator', layout,
default_element_size=(12, 1))
while True:
event, values = window.read()
print(event, values)
if event == sg.WIN_CLOSED: # always, always give a way out!
break
elif event == 'option_type':
select = values[event]
option_choice = methodology[select]
window['option_value'].update(value=option_choice[0], values=option_choice)
sg.popup_non_blocking(event, values)
window.close()
例如,我有两个 Drop 对象下拉列表。第一个用户可以从 OPTIONS_CHOICE 中选择,第二个基于用户在 OPTION_CHOICE 中的选择。 IE。如果第一个下拉列表中的用户 select 'Geometric Asian',则只有 ['Closed Form'、'Monte Carlo'] 可供选择。
import sys
import PySimpleGUI as sg
OPTIONS_CHOICE = ['European', 'American', 'Geometric Asian', 'Arithmetic Asian', 'Geometric Basket', 'Arithmetic Basket']
methodology = {
'European' : ['Black Scholes', 'Binominal Tree'],
'American' : ['Binominal Tree'],
'Geometric Asian' : ['Closed Form', 'Monte Carlo'],
'Arithmetic Asian' : ['Monte Carlo', 'Monte Carlo with Control Variate'],
'Geometric Basket' : ['Closed Form', 'Monte Carlo'],
'Arithmetic Basket' : ['Monte Carlo', 'Monte Carlo with Control Variate'],
}
option_layout = [
[sg.Text('Step 1: Select an Option Type', background_color='darkseagreen')],
[sg.Text('Option Type:', background_color='darkseagreen'), sg.Drop(values=OPTIONS_CHOICE, default_value = 'European', auto_size_text=True, enable_events=True, key='option_type')],
[sg.Text('Step 2: Select a Methodology', background_color='darkseagreen')],
[sg.Text('Methodology:', background_color='darkseagreen'), sg.Drop(values=option_choice, auto_size_text=True)]
]
iv_layout = [[sg.Text('This is inside tab 5')],
[sg.Input(key='-in4-')]]
layout = [[sg.TabGroup([[sg.Tab('Option Value', option_layout, background_color='darkseagreen', key='-mykey-'),
sg.Tab('Implied Volatility', iv_layout)]], key='-group1-', tab_location='top', selected_title_color='purple')],
[sg.Button('Compute')]]
window = sg.Window('Option Calculator', layout,
default_element_size=(12, 1))
while True:
event, values = window.read()
sg.popup_non_blocking(event, values)
print(event, values)
if event == sg.WIN_CLOSED: # always, always give a way out!
break
print(event, values)
window.close()
在事件循环中发生第一个 Drop 事件时更新第二个 Drop 元素。
import sys
import PySimpleGUI as sg
OPTIONS_CHOICE = ['European', 'American', 'Geometric Asian', 'Arithmetic Asian', 'Geometric Basket', 'Arithmetic Basket']
methodology = {
'European' : ['Black Scholes', 'Binominal Tree'],
'American' : ['Binominal Tree'],
'Geometric Asian' : ['Closed Form', 'Monte Carlo'],
'Arithmetic Asian' : ['Monte Carlo', 'Monte Carlo with Control Variate'],
'Geometric Basket' : ['Closed Form', 'Monte Carlo'],
'Arithmetic Basket' : ['Monte Carlo', 'Monte Carlo with Control Variate'],
}
default1 = OPTIONS_CHOICE[0]
option_choice = methodology[default1]
default2 = option_choice[0]
option_layout = [
[sg.Text('Step 1: Select an Option Type', background_color='darkseagreen')],
[sg.Text('Option Type:', background_color='darkseagreen'),
sg.Drop(values=OPTIONS_CHOICE, default_value = default1, auto_size_text=True, enable_events=True, key='option_type')],
[sg.Text('Step 2: Select a Methodology', background_color='darkseagreen')],
[sg.Text('Methodology:', background_color='darkseagreen'),
sg.Drop(values=option_choice, default_value = default2, auto_size_text=True, key='option_value')]
]
iv_layout = [[sg.Text('This is inside tab 5')],
[sg.Input(key='-in4-')]]
layout = [[sg.TabGroup([[sg.Tab('Option Value', option_layout, background_color='darkseagreen', key='-mykey-'),
sg.Tab('Implied Volatility', iv_layout)]], key='-group1-', tab_location='top', selected_title_color='purple')],
[sg.Button('Compute')]]
window = sg.Window('Option Calculator', layout,
default_element_size=(12, 1))
while True:
event, values = window.read()
print(event, values)
if event == sg.WIN_CLOSED: # always, always give a way out!
break
elif event == 'option_type':
select = values[event]
option_choice = methodology[select]
window['option_value'].update(value=option_choice[0], values=option_choice)
sg.popup_non_blocking(event, values)
window.close()