Здравствуйте, я нашел небольшую проблему с использованием библиотеки черепах и IDLE питона. Обратите внимание на следующий код, написанный на Python 3.5.2:Tkinter не отвечает при запуске ввода(), хуже в IDLE
import turtle
turtle.Turtle()
input("Try moving/resizing the window in IDLE. Press enter than try again.")
Перед нажатием клавиши ввод, чтобы дать свой вход, окно черепахи будет помечено как отвечать на запросы и не позволяет пользователю изменять его размер. То есть, если он работает с IDLE. Тем не менее, он отлично работает, когда сталкивается с чем-то вроде командной строки Windows или PowerShell.
Если пробег через IDLE, после нажатия пользователем ввести окно может , то будет свободно перемещаться и изменять размер без проблем. Это связано с тем недостатком, что мы больше не внутри скрипта, а обратно в оболочку python. Конечно, мы все еще можем взаимодействовать с черепахой через оболочку, но это не то, что я хочу в своем фактическом приложении. Моя основная программа использует input(), чтобы спросить пользователя, хотят ли они перемещаться/вращаться и на сколько. Это остается в бесконечном цикле, пока пользователь не вводит такую фразу, как «quit», чтобы закончить программу. Отмечу, что даже с IDLE черепаха все еще движется и рисуется правильно. Проблема в том, что само окно становится невосприимчивым. Содержимое все правильно.
Мне очень любопытно, почему только IDLE дает мне такое поведение ... Не только это, есть ли способ, которым я могу держать окно черепахи от того, чтобы быть невосприимчивым и все еще использовать input() и тому подобное ? Или, может быть, есть альтернатива, о которой я не думал? Мое исследование побудило меня поверить, что это имеет отношение к TkInter. Это объясняет, почему это работает только за пределами IDLE.
Ниже изображение, которое показывает мое затруднительное положение.
FYI, нет никакой разницы между запуском python.exe из оболочки cmd или powershell. В обоих случаях python.exe наследует консольный дескриптор (для общего IPC к приложенному экземпляру conhost.exe) и стандартные дескрипторы для входных и экранных буферов консоли (если стандартный ввод-вывод не перенаправлен на канал или файл). Оболочка ждет своего дескриптора процесса для python.exe, поэтому он не взаимодействует с консолью до выхода Python. – eryksun
При вводе в консоль Windows - для ввода REPL или ввода строки в 'input()' - окно черепахи должно перестать реагировать, потому что основной поток заблокирован и 'PyOS_InputHook' не работает для обновления Окно Tk. Если на самом деле все еще обновляется окно черепахи, то наиболее вероятным объяснением является то, что у вас установлена пиковая линия. Он не использует приготовленное чтение, которое блокируется до тех пор, пока пользователь не нажимает кнопку ввода, а вместо этого считывает необработанные события ввода в консоль и может продолжить вызов крюка ввода для обновления Tk, когда пользователь вводит текст. – eryksun