【问题标题】:How to While loop timer in here?如何在这里循环计时器?
【发布时间】:2019-04-26 09:07:46
【问题描述】:

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

【问题讨论】:

    标签: python loops timer pysimplegui


    【解决方案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
    

    【讨论】:

    • 您不应该在事件循环中调用 window.Layout。它应该只调用一次。在您的事件循环中,调用应该是 window.Read(timeout=10)。您可以在对 Window 本身的调用中指定布局。这是第二个参数。
    • 好的,重新阅读了文档(我根本不知道这个框架),我会更新我的答案来说明这一点。
    【解决方案2】:

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

    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
    

    【讨论】:

      【解决方案3】:

      在 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-12
        • 2021-04-02
        • 2016-08-09
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        • 2023-01-13
        相关资源
        最近更新 更多