Как сделать цикл таймера здесь? - PullRequest
1 голос
/ 26 апреля 2019

У меня есть приложение GUI с циклом whileУ меня проблемы с вставкой оператора if, который разрывает циклЯ хочу, чтобы это был таймер, поэтому, если ничего не произойдет в течение 60 секунд, цикл while прервется.

layout = [[sg.Text('Velg mappe som skal tas backup av og hvor du vil plassere backupen')],
          [sg.Text('Source folder', size=(15, 1)), sg.InputText(a), sg.FolderBrowse()],
          [sg.Text('Backup destination ', size=(15, 1)), sg.InputText(b), sg.FolderBrowse()],
          [sg.Text('Made by XXX™')],
          [sg.Submit("Kjør"), sg.Cancel("Exit")]]
window = sg.Window('Backup Runner v2.1')
while True:  # Event Loop
    event, values = window.Layout(layout).Read()
    if event in (None, 'Exit'):
        sys.exit("aa! errors!")
        print("Skriptet ble stoppet")
    if event == 'Kjør':
        window.Close()
        break

Ответы [ 3 ]

1 голос
/ 26 апреля 2019

Вы можете попробовать это с модулем времени:

import time

seconds = int(time.time()) # This is seconds since epoch
while True:
    if int(time.time()) > seconds + 60: # True when seconds + 60 < current seconds
        break # End of your loop
1 голос
/ 26 апреля 2019

Если вы перейдете по этой ссылке на документы: https://pysimplegui.readthedocs.io/#persistent-window-example-running-timer-that-updates

Вы увидите, что можете использовать встроенный модуль time, чтобы сообщить вам, сколько сейчас времени. Вы можете рассчитать время окончания и просто подождать, пока:

import time

layout = ...
window = sg.Window('Backup Runner v2.1').Layout(layout)

end_time = time.time() + 60

while True:  # Event Loop
    event, values = window.Read(timeout=10)
    # Your usual event handling ...

    if time.time() > end_time:
        break
0 голосов
/ 26 апреля 2019

Самый простой способ сделать это в PySimpleGUI - установить значение timeout в вызове на window.Read().

. Этот код будет ожидать ввода пользователя в течение 60 секунд.Если ничего не получено, вы получите значение «Timeout Key», возвращенное вам из вызова Read.

Обратите внимание, что вы не должны вызывать Layout внутри цикла while.Это больше похоже на то, что вам нужно:

while True:  # Event Loop
    event, values = window.Read(timeout=60*1000)
    if event in (None, 'Exit'):
        sys.exit("aa! errors!")
        print("Skriptet ble stoppet")
    if event == 'Kjør':
        window.Close()
        break
    if event == sg.TIMEOUT_KEY:
        break
...