как убить вызов функции через определенное время - PullRequest
1 голос
/ 23 апреля 2020
def input():
  sg.theme('TanBlue')
  event, values = sg.Window('Login Window',
              [[sg.T('Please Enter your email'), sg.In(key='-ID-')],
              [sg.B('OK'), sg.B('Cancel') ]]).read(close=True)


  login_id = values['-ID-']
  return login_id

У меня есть эта простая функция, написанная на python, это маленький GUI, который всплывает, чтобы получить ввод от пользователя. но то, что я пытаюсь сделать, это через некоторое время, скажем, 10 секунд. если не вводится никаких данных, я хочу закрыть GUI и использовать значение по умолчанию для предполагаемого ввода. весь мой сценарий приостанавливается с использованием этого GUI, если не введено никаких данных, сценарий не будет продолжен Я не хочу этого, но я не могу понять, как это реализовать. Я попытался использовать сигнал в python, но у меня windows 10, и я не смог правильно его интегрировать. Я хотел бы универсальное решение для этого Спасибо

1 Ответ

1 голос
/ 23 апреля 2020

input является ключевым словом в Python и поэтому не должно использоваться в качестве имени функции.

Вы можете добавить тайм-аут при вызове чтения.

В этом примере дайте пользователю 3 секунды для ввода значения и нажмите ОК:

import PySimpleGUI as sg

def timed_input():
    sg.theme('TanBlue')
    event, values = sg.Window('Login Window',
                              [[sg.T('Please Enter your email'), sg.In(key='-ID-')],
                               [sg.B('OK'), sg.B('Cancel')]]).read(timeout=3000, close=True)
    if event == sg.TIMEOUT_KEY:
        print('Timed out')
        login_id = None
    else:
        login_id = values['-ID-']
    return login_id

print(timed_input())

Хорошее использование сокращенных имен элементов и параметров закрытия. Я не видел тайм-аут с параметром close раньше. Интересная комбинация.

...