Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在这里设置循环计时器?_Python_Loops_Timer_Pysimplegui - Fatal编程技术网

Python 如何在这里设置循环计时器?

Python 如何在这里设置循环计时器?,python,loops,timer,pysimplegui,Python,Loops,Timer,Pysimplegui,我有一个带有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.FolderBrow

我有一个带有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')

如果您按照此链接访问文档:

您将看到,您可以使用内置的
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

您可以尝试使用时间模块:

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
导入时间
seconds=int(time.time())#这是自epoch以来的秒数
尽管如此:
如果int(time.time())>seconds+60:#当seconds+60<当前秒时为True
打破你的循环

PySimpleGUI中最简单的方法是在调用
window.Read()时设置
超时值

此代码将等待用户输入60秒。如果未收到任何消息,则您将从
Read
调用返回一个“Timeout Key”值

请注意,您不应该在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

您不应该在事件循环中调用window.Layout。它应该只被调用一次。在事件循环中,调用应该是window.Read(timeout=10)。您可以在对窗口本身的调用中指定布局。这是第二个参数。好的,在重新阅读文档(我根本不知道这个框架)之后,我将更新我的答案以表明这一点。
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