Window in Window with PySimpleGUI list

Window in Window with PySimpleGUI list

我正在尝试在 gui ish 中获取 gui。

第一个 gui 的布局:

    layout = [[sg.InputText(size=(31,1), key='-OUTPUT-')],
              [sg.Button('(', size=(5,1)), sg.Button(')', size=(5,1)), sg.Button('C', size=(5,1)), sg.Button('<<', size=(5,1))],
              [sg.Button('7', size=(5,1)), sg.Button('8', size=(5,1)), sg.Button('9', size=(5,1)), sg.Button('/', size=(5,1))],
              [sg.Button('4', size=(5,1)), sg.Button('5', size=(5,1)), sg.Button('6', size=(5,1)), sg.Button('*', size=(5,1))],
              [sg.Button('1', size=(5,1)), sg.Button('2', size=(5,1)), sg.Button('3', size=(5,1)), sg.Button('-', size=(5,1))],
              [sg.Button('0', size=(5,1)), sg.Button('.', size=(5,1)), sg.Button('=', size=(5,1)), sg.Button('+', size=(5,1))]]

然后是第二种布局:

    layout = [[sg.Text('Text:', size=(9,1)), sg.Input()],
              [sg.Text('Amount:', size=(9,1)), sg.Slider(range=(1,1000),default_value=1,size=(35,15),orientation='horizontal', resolution=10)],
              [sg.Text('Speed(m/s):', size=(9,1)), sg.Slider(range=(1000,1),default_value=1000,size=(35,15),orientation='horizontal', resolution=100)],
              [sg.Text('Delay:', size=(9,1)), sg.Slider(range=(1,10),default_value=1,size=(35,15),orientation='horizontal')],
              [sg.Button('Start')]]

根布局是:

layout = [[sg.Listbox(values=['Wifi Passwords', 'Email Bot', 'Auto Clicker', 'Calculator', 'Spambot', 'Upload File', 'IP Lookup', 'URL Resolver', 'Youtube Downloader', 'Is Leap Year', 'Space Shot','URL Shortener','Tic Tac Toe', 'Random Password', 'Fizz Buzz', 'Pong', 'Turtle Race'], size=(30, 15), key=0, enable_events=True)]]

我该如何设置它,以便当我从根目录中的列表中选择 1 个选项时,匹配它的布局显示在它下面的子 window 中?

感谢您的帮助。

这是一个例子,

import PySimpleGUI as sg

sg.theme("DarkBlue")
sg.set_options(font=('Courier New', 16))

def main_window(function_list):
    layout = [[sg.Listbox(values=function_list, size=(30, 15), key='Func_List',
        enable_events=True, select_mode=sg.LISTBOX_SELECT_MODE_SINGLE)]]
    return sg.Window("Main Window", layout, finalize=True)

def calculator():
    size = (5, 1)
    layout = [
        [sg.InputText(size=(31,1), key='-OUTPUT-')]]+[
        [sg.Button(char, size=size) for char in line] for line in
            [['(', ')', 'C', '<<'], ['789/'], ['456*'], ['123-'], ['0.=+']]
    ]
    window = sg.Window("Calculator", layout, finalize=True, modal=True)
    while True:
        event, values =window.read()
        if event == sg.WINDOW_CLOSED:
            break
    window.close()

def slider():
    text_size = (9, 1)
    options = {'size':(35, 15), 'orientation':'horizontal'}
    layout = [
        [sg.Text('Text:',       size=text_size),
         sg.Input()],
        [sg.Text('Amount:',    size=text_size),
         sg.Slider(range=(1,1000),default_value=1,   **options, resolution=10)],
        [sg.Text('Speed(m/s):', size=text_size),
         sg.Slider(range=(1000,1),default_value=1000,**options, resolution=100)],
        [sg.Text('Delay:',      size=text_size),
         sg.Slider(range=(1,10),  default_value=1,   **options)],
        [sg.Button('Start')]
    ]
    window = sg.Window("Slider", layout, finalize=True, modal=True)
    while True:
        event, values =window.read()
        if event == sg.WINDOW_CLOSED:
            break
    window.close()

func_dict = {
    'Wifi Passwords': None,
    'Email Bot': None,
    'Auto Clicker': None,
    'Slider': slider,
    'Calculator': calculator,
    'Spambot': None,
    'Upload File': None,
    'IP Lookup': None,
    'URL Resolver': None,
    'Youtube Downloader': None,
    'Is Leap Year': None,
    'Space Shot': None,
    'URL Shortener': None,
    'Tic Tac Toe': None,
    'Random Password': None,
    'Fizz Buzz': None,
    'Pong': None,
    'Turtle Race': None,
}
func_list = sorted(func_dict.keys())
window = main_window(func_list)

while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
        break
    elif event == 'Func_List':
        if not values[event]:
            continue
        item = values[event][0]
        if item in func_dict:
            function = func_dict[item]
            if function:
                window.hide()
                function()
                window.un_hide()

window.close()