Как интегрировать код с окном в PySimpleGUI

Сначала позвольте мне предисловие к этому, сказав, что я читал страницу документов PySimpleGUI и искал все в Интернете, но я не могу найти учебник о том, как на самом деле заставить окно что-то делать. Я изучил основы графического интерфейса пользователя, но теперь я не знаю, как вставить код в окно, поэтому он действительно что-то делает.

Я пытаюсь создать простой конвертер расстояния (из миль в километры). Макет работает, как и функция, но я понятия не имею, как их объединить.

import PySimpleGUI as sg

layout = [[sg.Text("Enter miles"), sg.InputText(key='-IN-')],
          [sg.Text('Kilometers ->'),sg.Text(key='-OUT-')],
          [sg.Button('Calculate'),sg.Button('Exit')]]

window = sg.Window('Miles to Kilometers',layout)

while True:
    event,values = window.read()
    if event == 'Exit' or event == sg.WIN_CLOSED:
        break
    elif event == 'Calculate':
        window['-OUT-'].update(converter(values['-IN-']))

def converter():
    miles = int(input("Enter miles: "))
    res = miles * 1.609344
    print(round(res,2))
converter()

window.close()

person Robin Sage    schedule 11.10.2020    source источник
comment
Позвольте мне помочь с этим поиском ... Cookbook.PySimpleGUI.org полон рецептов, которые показывают, как на самом деле получить окно делать вещи. Если вы предпочитаете видеоуроки, вы найдете 17 из них здесь, YouTube.PySimpleGUI.org. Весь ваш код для взаимодействия с окном, как ввод, так и вывод, находятся внутри вашего цикла событий. Звоните оттуда. Удалите вызов на ввод и добавьте мили в качестве параметра, как будто вы его уже вызываете.   -  person Mike from PSG    schedule 12.10.2020
comment
Кроме того, попробуйте переписать функцию, чтобы она принимала мили в качестве входного параметра, и переместите функцию над макетом.   -  person JayCo741    schedule 12.10.2020


Ответы (1)


Пару вещей я заметил ...

(1) Нет места для отображения текста «-OUT-». Создав пространство с помощью \ t \ t \ t, я позволил выходным данным место для печати.

(2) При нажатии кнопки «Вычислить» необходимо вызвать функцию. Вы увидите, что я изменил функцию convert (), чтобы получить значение, введенное пользователем в поле «-IN-».

import PySimpleGUI as sg

def converter(miles):
    res = miles * 1.609344
    return res


layout = [[sg.Text("Enter miles"), sg.InputText(key='-IN-')],
          [sg.Text('Kilometers ->'),sg.Text("\t\t\t", key='-OUT-')],
          [sg.Button('Calculate'),sg.Button('Exit')]]

window = sg.Window('Miles to Kilometers',layout)

while True:
    event,values = window.read()
    if event == 'Exit' or event == sg.WIN_CLOSED:
        break
    if event == 'Calculate':
        res = converter(float(values['-IN-']))
        window['-OUT-'].update(value=round(res,2))


window.close()

Это должно дать вам то, что вы ищете.

person MacItaly    schedule 13.10.2020
comment
Вы можете добавить параметр размера к текстовым элементам, которые должны быть элементами вывода. Это очень частое явление в примерах в документации PySimpleGUI: sg.Text (size = (12,1), key = '- OUT-') - person Mike from PSG; 15.10.2020
comment
@MacItaly Большое спасибо !! Я изучаю эту штуку последние две недели. Я пожираю поваренную книгу, но иногда все равно застреваю. - person Robin Sage; 17.10.2020
comment
Я знаю, что это слишком поздно, но просто хотел оставить это здесь для будущих пользователей. Перейдите на страницу pysimplegui.readthedocs.io/en/latest и нажмите на маленькое увеличительное стекло на вверху справа. Затем введите то, что вы хотите найти. Например, вы можете выполнить поиск по тексту, и вы попадете на страницу вызова функции. Это даст вам всю необходимую информацию. Благодарим @MikeyB за разработку и поддержку этого замечательного пакета. Это палочка-выручалочка :) - person Swastik Mohapatra; 07.02.2021