#python #python-3.x #time #while-loop
#python #python-3.x #время #while-цикл
Вопрос:
Я новый пользователь python 3.9, который пытается улучшить мое кодирование. Я пишу программу, которая использует цикл while и будет вызывать функции для нажатия клавиш на основе пользовательского ввода. Мой код в основном выглядит так:
from pynput.keyboard import Key, Controller
from graphics import *
import time
def wack():
M = Controller()
for i in range(3):
M.press('a')
time.sleep(1) # This guy right here is the issue
M.release('a')
def main():
click = Win.checkMouse()
while not click(click, exit_box):
click = Win.checkMouse()
if *input* == *correct string*:
wack()
У меня есть графическое окно с кнопкой выхода, и при нажатии кнопки выхода программа завершает работу и закрывает окно. Проблема в том, что time.sleep(1)
он не приостанавливает ввод или эту точку в коде, он приостанавливает всю программу, приостанавливая цикл while, что не то, что я хочу, чтобы он делал.
Поиск по функции time не дал никаких четких решений, поскольку time.sleep()
, по-видимому, это самая популярная функция приостановки в python.
Комментарии:
1. Я перечитывал это несколько раз, но это немного расплывчато. Когда вы говорите «графическое окно», вы имеете в виду видеоигру, например, вы пытаетесь создать бота? Кроме того, для time.sleep все, что делается, это пауза в программе, поэтому в цикле for внутри функции wack все, что когда-либо будет делать sleep, — это пауза в этой строке, то есть все, что делает time.sleep . Он спит в этой строке кода в течение заданного промежутка времени, а затем запускается снова, если вы не пытаетесь этого сделать, это неправильно использовать. Итак, чего вы пытаетесь достичь от начала до конца, это может быть дополнительной помощью.
2. @NewCoder18 От начала до конца этот код принимает пользовательский ввод в виде предустановленных кодов. Затем код активируется, и кнопка ввода нажимается непрерывно. Весь смысл этого в том, чтобы быть тренером, который я могу использовать в эмулируемой игре Pokemon. Таким образом, пользователь нажимает на графическое окно, созданное программой, вводит свой код и все еще может взаимодействовать с окном, пока код работает в фоновом режиме.
Ответ №1:
asyncio
добавлена удивительная функция python3.7
, которая позволяет вам ждать, пока объект или функция (вызываемая coroutine
в контексте асинхронного python) получат результат, пока выполняется остальная часть программы.
asyncio
имеет метод sleep, который приостанавливает только асинхронную функцию ( coroutine
) и позволяет выполнить остальной код в программе
Вот как:
from pynput.keyboard import Key, Controller
from graphics import *
import time
import asyncio
#This is the asnychronous funtion
async def wack():
M = Controller()
for i in range(3):
M.press('a')
await asyncio.sleep(1)#this sleeps the function but allows the rest of the program to work
M.release('a')
def main():
click = Win.checkMouse()
while not click(click, exit_box):
click = Win.checkMouse()
if *input* == *correct string*:
asyncio.run(wack()) #calling the asynchronous funtion
Вот руководство по пониманию asyn io для python