안녕하세요 거북이 라이브러리와 Python의 IDLE을 사용하여 약간의 문제가 발견되었습니다. 파이썬 3.5.2에 기록 된 다음 코드 준수 : 누르기 전에input()을 실행할 때 Tkinter가 응답하지 않음 IDLE
import turtle
turtle.Turtle()
input("Try moving/resizing the window in IDLE. Press enter than try again.")
는 귀하의 의견을주고 입력을, 거북이 창이 응답으로 표시하고 사용자가 크기를 조정하는 것을 허용하지됩니다. 즉, IDLE로 실행 한 경우입니다. 그러나 Windows 명령 프롬프트 또는 PowerShell과 같은 명령을 실행하면 완벽하게 작동합니다.
IDLE을 실행 한 경우 사용자가 입력 한 후 ,을 자유롭게 이동하고 아무런 문제없이 크기를 조정할 수 있습니다. 이것은 우리가 더 이상 스크립트 안에 있지 않지만 파이썬의 쉘로 돌아가는 단점을 가지고 있습니다. 물론 쉘을 통해 거북이와 상호 작용할 수는 있지만 실제로 적용 할 때 원하는 것은 아닙니다. 내 주 프로그램은 input()을 사용하여 사용자에게 이동/회전 여부와 양을 묻습니다. 사용자가 'quit'과 같은 문구를 입력하여 프로그램을 종료 할 때까지 무한 루프가 반복됩니다. 나는 IDLE이더라도 거북이가 움직이고 올바르게 그려지는 것을 볼 것입니다. 문제는 창 자체가 응답하지 않는 것입니다. 내용이 모두 정확합니다.
IDLE이 나에게 그런 행동을하는 이유에 관해서는 궁금합니다. 그뿐만 아니라 거북이 창을 응답하지 않게하고 입력() 등을 사용하는 방법이 있습니까? ? 아니면 제가 생각하지 못한 대안이 있을까요? 저의 연구는 저에게 이것이 TkInter와 관련이 있다고 믿게했습니다. 왜 그것이 IDLE 밖에서 만 작동하는지 설명 할 수 있습니다.
아래는 내 처지를 보여주는 이미지입니다. 당신은 의심으로
참고로, cmd 셸이나 powershell에서 python.exe를 실행하는 것과 차이가 없습니다. 두 경우 모두, python.exe는 표준 I/O가 파이프 나 파일로 리디렉션되지 않는 한 콘솔 핸들 (conhost.exe의 연결된 인스턴스에 일반 IPC 용)과 콘솔의 입력 및 화면 버퍼에 대한 표준 핸들을 상속합니다. 쉘은 python.exe에 대한 프로세스 핸들을 기다리므로 파이썬이 종료 될 때까지 콘솔과 상호 작용하지 않습니다. – eryksun
REPL 입력 또는'input()'에 줄 입력시 Windows 콘솔에 타이핑 할 때 거북 창이 응답하지 않게됩니다. 메인 스레드가 차단되고 PyOS_InputHook가 실행 중이 아니기 때문에 거북 창이 응답하지 않게됩니다. Tk 창. 실제로 거북이 창을 업데이트하는 경우 가장 가능성있는 설명은 pyreadline을 설치 한 것입니다. 사용자가 enter 키를 누를 때까지 차단 된 조리 된 읽기를 사용하지 않고 원시 콘솔 입력 이벤트를 읽으며 사용자가 텍스트를 입력하는 동안 계속 입력 훅을 호출하여 Tk를 업데이트 할 수 있습니다. – eryksun