【问题标题】:Can UI interact while program loop through several taskUI可以在程序循环执行多个任务时进行交互吗
【发布时间】:2021-08-04 06:00:18
【问题描述】:

我正在开发一个按顺序处理许多任务的程序。我称这种模式为“自动模式”。但我需要让用户控制并开始使用程序手册,通过菜单选项,最后再次选择“自动模式”。

如何在不停止程序执行的情况下中断“自动模式”。猜猜 input() 会让程序永远等待用户进行输入,其余代码将停止执​​行?

有什么建议吗?

【问题讨论】:

  • 它应该作为一个单独的线程/进程运行,以便您的主进程可以监听键盘敲击,然后指示其他线程/进程暂停执行。线程和进程都可以暂停并进入等待状态。请展示您到目前为止所做的尝试。
  • 感谢@SamridhTuladhar 作为在stackoverflow 上提问的新手,我对我的问题进行了分析,解释了一种可行的解决方案,但对它的工作方式并不满意。它需要几个按键才能做出反应,所以不能完全满足我的要求。这个执行的任务非常繁重,需要一些时间来完成,因此您的线程/进程建议可能是一条更好的路径。
  • 我检查了您的解决方案,虽然它确实完成了工作,但您可以看到,对于每个“中断”,它都会导致 2 秒的睡眠,并且在此期间,您按下的任何内容都会被忽略,此外,您还有一个额外的 time.sleep(0.5) 会导致更慢。因此,请查看其他基于线程/进程的方法。
  • 感谢@SamridhTuladhar 的评论。是的 time.sleep(2) 模拟了完整应用程序中发生的事情。当程序处于从键盘函数调用的其他函数中时,键盘似乎不起作用。认为你在线程上是正确的。必须找到一些文档并深入研究。

标签: python-3.x loops user-input


【解决方案1】:

找到解决此问题的解决方案,但似乎需要几个键盘交互。 在下面的示例中,这会导致多次按键以使 while 循环进入 if 语句并将程序带回主菜单。

    import keyboard
    import time
    
    my_counter = 1
    while True:
        my_counter += 1
        if keyboard.is_pressed('h'):
            print("Letter H was pushed")
            time.sleep(2)
            break

        print("Something is going on... ", my_counter)
        time.sleep(0.5)

    print("Simulate user interupt and return to main menu...")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多