Python, как определить клавишу со стрелкой «вправо», чтобы пропустить некоторую строку кодов

#python #pyautogui

#python #pyautogui

Вопрос:

Я новичок в этом форуме и python, любая помощь приветствуется.

Я пытаюсь добавить оператор if в ЦИКЛ FOR, как показано в моем коде ниже, на данный момент моя мышь перемещается на 4 точки, прежде чем закрыть текущую веб-вкладку, и повторяет это 10 раз.

Мой вопрос в том, как добавить оператор if ie. если при перемещении мыши нажата клавиша со стрелкой вправо, она пропускает несколько строк кодов и переходит прямо к последним четырем строкам кодов?

Текущая вкладка закрывается и переходит на следующую вкладку, пока не завершит 10 циклов. Этот новый оператор If помогает намного быстрее закрыть вкладку браузера с помощью вмешательства человека вместо ожидания целых 8 секунд.

Спасибо.

 import pyautogui as pg
import time, pyautogui
import keyboard

from pynput.keyboard import Key, Listener
pg.moveTo(2679, 900)
pg.click()

for i in range (10):
    pg.moveTo(2679, 1620, duration=2)
    pg.moveTo(2679, 1923, duration=2)
    pg.moveTo(1365, 1875, duration=2)
    pg.moveTo(1365, 1572, duration=2)
    pg.keyDown('ctrl')
    pg.keyDown('w')
    pg.keyUp('w')
    pg.keyUp('ctrl')

 

Ответ №1:

Не уверен, что это именно то, что вы имеете в виду, однако при нажатии клавиши со стрелкой вправо цикл завершается, позволяя продолжить код.

 import pyautogui as pg
import time, pyautogui
import keyboard

from pynput.keyboard import Key, Listener
pg.moveTo(2679, 900)
pg.click()

for i in range (10):
    if keyboard.is_pressed('right arrow'):
        break
    pg.moveTo(2679, 1620, duration=2)
    pg.moveTo(2679, 1923, duration=2)
    pg.moveTo(1365, 1875, duration=2)
    pg.moveTo(1365, 1572, duration=2)
    pg.keyDown('ctrl')
    pg.keyDown('w')
    pg.keyUp('w')
    pg.keyUp('ctrl')
 

или, может быть:

 for i in range (10):
    if keyboard.is_pressed('right arrow'):
        pg.keyDown('ctrl')
        pg.keyDown('w')
        pg.keyUp('w')
        pg.keyUp('ctrl')
    else:
        pg.moveTo(2679, 1620, duration=2)
        pg.moveTo(2679, 1923, duration=2)
        pg.moveTo(1365, 1875, duration=2)
        pg.moveTo(1365, 1572, duration=2)
        pg.keyDown('ctrl')
        pg.keyDown('w')
        pg.keyUp('w')
        pg.keyUp('ctrl')
 

Комментарии:

1. Большое вам спасибо за вашу помощь!——- 1: первый ответ — это не то, что я искал, поскольку он разрывает цикл——- 2 : ключ не будет обнаружен до тех пор, пока не будет завершен последний переход к (1365, 1572),и есть только полсекунды времени, чтобы нажать правую клавишу, если пропущено, курсор переходит к следующему путешествию.

Ответ №2:

Вы можете использовать потоковую обработку для мгновенной проверки нажатия клавиши, что может сэкономить некоторое время.

 from threading import Thread
import pyautogui as pg
import time, pyautogui
import keyboard

from pynput.keyboard import Key, Listener
pg.moveTo(2679, 900)
pg.click()
pressed = False
StopCheckingForKey = False

def loop_function():
    global pressed, StopCheckingForKey
    for i in range (10):
        pg.moveTo(2679, 1620, duration=2)
        pg.moveTo(2679, 1923, duration=2)
        pg.moveTo(1365, 1875, duration=2)
        pg.moveTo(1365, 1572, duration=2)
        if pressed == True:
            pressed = False
        else:
            pg.keyDown('ctrl')
            pg.keyDown('w')
            pg.keyUp('w')
            pg.keyUp('ctrl')
    StopCheckingForKey = True

def check_key():
    global pressed, StopCheckingForKey
    while not StopCheckingForKey:
        if keyboard.is_pressed('right arrow'):
            pg.keyDown('ctrl')
            pg.keyDown('w')
            pg.keyUp('w')
            pg.keyUp('ctrl')
            pressed = True


t1 = Thread(target=loop_function)
t1.setDaemon(True)
t1.start()

t2 = Thread(target=check_key)
t2.setDaemon(True)
t2.start()
 

Комментарии:

1. Еще раз спасибо за вашу помощь, действительно полезную. ————— Эта настройка ближе к тому, что я ищу. Поскольку он обнаруживает «стрелку вправо» в любой момент времени и закрывает вкладку. Однако курсор продолжает свой исходный путь (обводит 10 раз, пока не закроет ту вкладку, на которой он находится, и переходит на следующую вкладку), каков был бы наилучший способ его кодирования, поэтому, как только обнаружена клавиша со стрелкой «вправо», она закрывает текущую вкладку, завершаетпредыдущая траектория полета и начинает движение заново с первой точки (2679, 1620) для 10 кругов? Спасибо.