Python 如何通过按键来断开循环?
我写了一个小程序,在messenger中为我发送垃圾邮件。但是如果我想停下来,我就停不下来。我试图将“try/except:KeyboardInterrupt”放在循环中,但没有用 我需要python以某种方式检查我是否按了某个键,以及是否按了该键来中断循环。我还知道Tkinter中有一个Python 如何通过按键来断开循环?,python,loops,for-loop,tkinter,pyautogui,Python,Loops,For Loop,Tkinter,Pyautogui,我写了一个小程序,在messenger中为我发送垃圾邮件。但是如果我想停下来,我就停不下来。我试图将“try/except:KeyboardInterrupt”放在循环中,但没有用 我需要python以某种方式检查我是否按了某个键,以及是否按了该键来中断循环。我还知道Tkinter中有一个after()方法,我应该使用它而不是time.sleep,但我的尝试失败了。这是我的密码: from tkinter import * import time import pyautogui root =
after()
方法,我应该使用它而不是time.sleep
,但我的尝试失败了。这是我的密码:
from tkinter import *
import time
import pyautogui
root = Tk()
root.title('Typer')
text_field = Text(root, height=20, width=40)
button = Button(text='----Start----')
def typer(event):
text = text_field.get("1.0",END)
time.sleep(5)
for i in text.split(' '):
pyautogui.write(i)
pyautogui.press('enter')
button.bind('<Button-1>', typer)
text_field.pack()
button.pack()
root.mainloop()
但是我仍然无法中断for循环您应该首先添加一条语句,检查它是否仍在运行:
def typer(event):
global running
running = True
text = text_field.get("1.0",END)
time.sleep(5)
for i in text.split(' '):
if running == False: #Will break the loop if global variable is changed
break
pyautogui.write(i)
pyautogui.press('enter')
然后有几个选项可供选择;您可以使用tkinter的绑定(仅在tkinter窗口中工作)
或:
我为这段简陋的代码道歉,但希望你能理解。
我还没有测试它,所以如果您有问题,请告诉我。您应该首先添加一条语句,检查它是否仍在运行:
def typer(event):
global running
running = True
text = text_field.get("1.0",END)
time.sleep(5)
for i in text.split(' '):
if running == False: #Will break the loop if global variable is changed
break
pyautogui.write(i)
pyautogui.press('enter')
然后有几个选项可供选择;您可以使用tkinter的绑定(仅在tkinter窗口中工作)
或:
我为这段简陋的代码道歉,但希望你能理解。
我还没有测试过,所以如果您有问题,请告诉我。这是否回答了您的问题@jasonharper好吧,这不是一个真正的重复,因为OP说他不知道如何使用
.after()
。如果你想打破一个循环,你应该检查循环中的一些条件。但是在你的代码中没有这样的代码。你到底想如何停止循环?您想输入shell还是只需按任意键,还是在tkinter窗口中按某个键?@OffflufDragon 9我想通过按代码中指定的键来停止它,例如Esc这是否回答了您的问题@jasonharper好吧,这不是一个真正的重复,因为OP说他不知道如何使用.after()
。如果你想打破一个循环,你应该检查循环中的一些条件。但是在你的代码中没有这样的代码。你到底想如何停止循环?您是想在shell中输入,还是只想按任意键,还是想在tkinter窗口中按某个键?@OffflufDragon 9我想通过按代码中指定的键来停止它,例如Esc谢谢!我并没有通过按键来阻止它,它看起来太复杂了,你们的建议没有帮助:(所以我添加了停止按钮并将其绑定到停止(事件)中,它对我有效!实际上没有:(它不起作用,以前我做过不好的测试,但无论如何,谢谢你,我会继续努力让它起作用。当按下按钮时,循环将继续工作,并在末尾停止函数调用。谢谢!我没有通过按键来阻止它,它似乎太复杂了,你的建议没有帮助:(所以我添加了stop按钮并将其绑定到stop(event)上,它对我起了作用!事实上不:(它不起作用,以前我做了糟糕的测试,但无论如何,谢谢你,我会继续努力让它起作用。当按下按钮时,循环将继续工作,并最终停止函数调用。)
root.bind("<Escape>", stop)
def stop(event):
global running
running = False
keyboard.on_press_key("Esc", stop)
def typer(event):
text = text_field.get("1.0",END)
time.sleep(5)
for i in text.split(' '):
if keyboard.is_pressed("Esc"): #Will break the loop if key is pressed
break
pyautogui.write(i)
pyautogui.press('enter')