Окно в окне со списком PySimpleGUI

Я пытаюсь получить графический интерфейс в графическом интерфейсе.

Макет, который у меня есть для первого графического интерфейса:

    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 вариант из списка в корневом каталоге, соответствующий ему макет отображался во вспомогательном окне под ним?

Спасибо за любую помощь.


person smvd    schedule 03.02.2021    source источник


Ответы (1)


Вот вам пример,

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()
person Jason Yang    schedule 03.02.2021