我一直在搜索和搜索如何弄清楚如何输入或进入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
答案 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