如何在Python中循环输入?

时间:2015-06-11 05:01:09

标签: python loops input

我一直在搜索和搜索如何弄清楚如何输入或进入while循环。同样,input()命令不会停止我的秒表。我尝试过tkinter,pygame和其他几种方法,但它们只是没有用。如果有人可以帮助我,我会更喜欢小而简单的东西,如果有可能的话。并且要具体说明我想要学习的内容,基本上允许在按下任何键时立即停止(最好不要输入)。谢谢,saddlepiggy!

到目前为止,这是我所拥有的,没有任何东西可以激活停止:

    #Setup (Variables and stuff)
        hours = 0
        minutes = 0
        seconds = 0
        import time



    #Main Part of Code
    print("Welcome to PyWatch, a stopwatch coded in Python!")
    print("Press any key to start the stopwatch.")
    print("Then, press any key to stop it!")
    start = input("")

    while hours < 48:
        seconds = seconds + 1
        time.sleep(1)
        print(hours, "hours,", minutes, "minutes,", seconds, "seconds")



    #If Statements for getting seconds/minutes/hours
    if (seconds == 60):
        minutes = minutes + 1
        seconds = seconds - 60

    if (minutes == 60):
        hours =hours + 1
        minutes = minutes - 60

2 个答案:

答案 0 :(得分:3)

线程就是你想要的。

创建第二个线程,在第一个线程处理秒表代码时等待输入。看哪:

 import threading, sys

 def halt():
     raw_input()

 threading.Thread(target=halt).start()


 while hours < 48 and threading.active_count() > 1:
     seconds = seconds + 1
     time.sleep(1)

     # copy and past what you had before

请允许我详细说明发生了什么:到目前为止,您编写的所有代码都是单线程的。这意味着一次只执行一行代码,只有一行执行线程。因此,您的脚本无法执行多任务,它无法等待输入并同时打印时间。

因此评估此行时

threading.Thread(target=halt).start()

主线程创建第二个执行线程。同时,主线程继续进入while循环。目标参数是线程的入口点,它是起点。它与主线程的if __name__ == "__main__:"类似。正如主线程到达if __name__ == "__main__:"的末尾时终止,我们的第二个线程一旦到达halt()的末尾就会终止。

threading.active_count函数告诉您当前执行的线程数。

答案 1 :(得分:0)

你不能用Python做到这一点。你在要求键盘事件。键盘事件随GUI一起提供。这个主题解释了几乎所有内容:QKeyPress event in PyQt

或者为您的操作系统使用外部应用程序,它可以将输出附加到Python程序循环读取的文件中。检测到某个事件时,您可以执行某些操作。对于Linux,这一步骤解释了:https://superuser.com/questions/248517/show-keys-pressed-in-linux