首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IDLE Python -如何让它在按下一个键时循环运行?

IDLE Python -如何让它在按下一个键时循环运行?
EN

Stack Overflow用户
提问于 2021-04-19 07:32:48
回答 2查看 55关注 0票数 0

我已经创建了一个宏,我想让它在运行py文件时不会发生任何事情,但是当我单击某个键时,if语句会运行while循环,当我再次单击该键时,脚本会暂停。

代码语言:javascript
复制
import time
import keyboard

time.sleep(3)

while True:
    try:
        #slot-1
        pyautogui.press('2')
        pyautogui.click(button= 'left', clicks=1)
        time.sleep(0.1)
        #slot-2
        pyautogui.press('3')
        pyautogui.click(button= 'left', clicks=1)
        time.sleep(0.1)
        #slot-3
        pyautogui.press('4')
        pyautogui.click(button= 'left', clicks=1)
        time.sleep(0.1)
        #slot-4
        pyautogui.press('5')
        pyautogui.click(button= 'left', clicks=1)
        time.sleep(0.1)
        if keyboard.is_pressed('alt'):
            print('Ending Loop')
            break
    except:
        break
EN

回答 2

Stack Overflow用户

发布于 2021-04-19 07:56:03

要启动循环,可以使用input() (按return / enter直接启动)

要完成此操作,请按ctrl +c并捕获KeyboardInterrupt异常

代码语言:javascript
复制
import time
import keyboard

time.sleep(3)

# press enter to start
input()

# press ctrl + c to finish
while True:
    try:
        #slot-1
        pyautogui.press('2')
        pyautogui.click(button= 'left', clicks=1)
        time.sleep(0.1)
        #slot-2
        pyautogui.press('3')
        pyautogui.click(button= 'left', clicks=1)
        time.sleep(0.1)
        #slot-3
        pyautogui.press('4')
        pyautogui.click(button= 'left', clicks=1)
        time.sleep(0.1)
        #slot-4
        pyautogui.press('5')
        pyautogui.click(button= 'left', clicks=1)
        time.sleep(0.1)
        if keyboard.is_pressed('alt'):
            print('Ending Loop')
            break
    except Exception as e:
        if e == KeyboardInterrupt:
            print('script stopped by user')
票数 0
EN

Stack Overflow用户

发布于 2021-04-19 08:13:33

为了解决你的问题,我混合使用了线程和全局变量。我还不得不求助于pynput模块,而不是“键盘”。虽然这是一个小的变通方法,但在您的场景中最好的解决方案是使用"async“(异步编程),以防止阻塞while循环的问题。这些循环将不允许程序的任何其他部分运行。这意味着我们的程序一旦进入while循环,就不能检测到按键。我之所以没有使用async,仅仅是因为我不熟悉它的语法,也不想让这个答案比它应该的更复杂。

代码语言:javascript
复制
import time
import keyboard
import pyautogui
from pynput.keyboard import Key, Listener
import threading
time.sleep(3)

closed = False

def begin_clicks():
    global closed
    while True:
        print(closed)
        if closed:
            break
        try:
            #slot-12
            pyautogui.press('2')
            pyautogui.click(button= 'left', clicks=1)
            time.sleep(0.1)
            #slot-2
            pyautogui.press('3')
            pyautogui.click(button= 'left', clicks=1)
            time.sleep(0.1)
            #slot-33
            pyautogui.press('4')
            pyautogui.click(button= 'left', clicks=1)
            time.sleep(0.1)
            #slot-4
            pyautogui.press('5')
            pyautogui.click(button= 'left', clicks=1)
            time.sleep(0.1)
    
        except:
            pass

thread = None

def on_press(key):
    global closed
    if str(key)[1] == "p":
        closed = False
        threading.Thread(target=begin_clicks).start()
    elif key == Key.alt:
        closed = True
        
        
with Listener(
        on_press=on_press) as listener:
    listener.join()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67154371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档