python 엔터키까지 눌러야 실행되는 게 아니라, 명령키를 누르면 바로 실행되게 하는 방법.
조회수 2689회
리스트안에서 '#'이 키보드 a,d키에 따라 양옆으로 움직이는 코드를 짜고싶은데 실행할 때, a키 누르고 엔터해야 실행되는게아니라 a키 누르면 바로 실행되게 하고싶은데 어떻게 해야 할까요?
import random
from pynput.keyboard import Key, Listener
myList=['2','4','1','7','5','6','9','3','8','10']
if__name__=='__main__':
rand_index = random.randint(0,9)
myList[rand_index] = '#'
while True:
print(myList)
command=input("command : ")
if command == 'a' or command == 'A':
if not rand_index == 0:
myList[rand_index], myList[rand_index-1] = myList[rand_index-1], myList[rand_index]
rand_index= rand_index-1
elif command=='d' or command=='D':
if not rand_index == 9:
myList[rand_index], myList[rand_index + 1] = myList[rand_index + 1], myList[rand_index]
rand_index = rand_index + 1
elif command=='exit':
break
def on_press(key):
try:
print(type(key.char))
if key.char == 'a'or'A':
print('a pressed')
elif key. char == 'd'or'D':
print('d pressed')
except AttributeError:
print()
def on_release(key):
try:
print(type(key.char))
if key == Key.esc:
return False
elif key.char == 'a' or 'A':
print('a released')
elif key.char == 'd' or 'D':
print('d released')
except AttributeError:
print()
with Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
getch를 이용해보시는건 어떨까요. window 계열에서는 msvcrt 를 이용하면 되고, UNIX/LINUX 계열에서는 termios 활용하시면 되요.
아래는 올려주신 소스코드 활용해서 제가 수정해봤어요 참고하세요 주의사항은 윈도우python idle 쉘 말고 cmd로 열어서 확인하시면되요 \r 은 엔터입니다.
수고하세요
import random import msvcrt myList=['2','4','1','7','5','6','9','3','8','10'] if __name__== '__main__': rand_index = random.randint(0,9) myList[rand_index] = '#' _ismoved = 1 while True: if(_ismoved == 1): print(myList) print("command : ") _ismoved = 0 if msvcrt.kbhit(): command = msvcrt.getwch() if command == 'a' or command == 'A': if not rand_index == 0: myList[rand_index], myList[rand_index-1] = myList[rand_index-1], myList[rand_index] rand_index= rand_index-1 _ismoved = 1 elif command=='d' or command=='D': if not rand_index == 9: myList[rand_index], myList[rand_index + 1] = myList[rand_index + 1], myList[rand_index] rand_index = rand_index + 1 _ismoved = 1 elif command=='\r': break
댓글 입력