2

我有一个带有 while 循环的 GUI 应用程序。我无法插入中断循环的 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

4

3 回答 3

1

如果您按照此链接访问文档: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
于 2019-04-26T09:26:34.510 回答
1

你可以试试这个时间模块:

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
于 2019-04-26T09:32:48.507 回答
0

PySimpleGUI 中最简单的方法是timeout将调用中的值设置为window.Read().

此代码将等待用户输入 60 秒。如果没有收到,那么您将获得从Read调用返回给您的“超时键”值。

请注意,您不应该在 while 循环内调用 Layout。这更像是您需要的:

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
于 2019-04-26T15:45:21.087 回答