Как использовать вложенные события в PySimpleGUI - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь использовать вложенные события. Когда я просматриваю файл, одно имя файла, удаляемое из полного пути, вызывает событие, которое переводит имя файла в текстовое поле, для которого enable_events установлено значение true, что вызывает другое событие для вызова функции и получения подробностей в формате pdf. ,

Если я включу две закомментированные строки, вы увидите, что функция работает и передает возвращаемое значение, но я пытаюсь разделить эти два события, так как функция для получения подробной информации о PDF занимает некоторое время.

Итак, заказ:

__ pdfpath __ получает полный путь к определенному просматриваемому файлу, который запускает событие, которое переводит имя файла в __ bookfilename __ , которое должно вызвать другое событие, которое вызовет функцию, которая отправит свой ответ __pdfdetails __

import PySimpleGUI as sg
import os


def get_pdf_details(pdfname):

    return pdfname + ' was processed'

layout = [

[sg.InputText('',key='_pdfpath_',enable_events=True),sg.FileBrowse(key='_filepath_')],
[sg.Text('',key='_bookfilename_',enable_events=True,size=(40, 1))],
[sg.Text('',key='_pdfdetails_', size=(40, 1) )],


]

window = sg.Window('', layout)

while True:
    event, value = window.Read()

    if event == '_pdfpath_':
        filename = os.path.basename(value['_pdfpath_'])
        window.Element('_bookfilename_').Update(filename)

        #response = get_pdf_details(filename)
        #window.Element('_pdfdetails_').Update(response)
    if event == '_bookfilename_':
        response = get_pdfdetails(value['_bookfilename_'])
        window.Element('_pdfdetails_').Update(response)

Итак, вопрос в том, как я могу вызвать второе событие?

Я попытался создать второе окно. Read () , чтобы создать второй цикл, подобный этому:

event2, value2 = window.Read()

но не сработало.

Есть идеи?

Спасибо

1 Ответ

1 голос
/ 14 мая 2019

Путь через это не события, путешествующие вокруг PySimpleGUI.Что вам нужно сделать, это разбить вашу долгосрочную функцию на поток.

Затем установите функцию Read со значением тайм-аута.В своем цикле проверьте, когда заканчивается поток.

...