Откройте новое окно на миллисекунду в Python(3x)
Я делаю небольшую игру, в которой нужно угадать, является ли ответ cp1 или cp2, и я хочу дать пользователю какую-то подсказку. Один из способов сделать это, я думаю, состоит в том, чтобы высветить пользователю ответ на нано или миллисекунду, то есть открыть новое окно с: , Есть идеи, как это сделать?
2 ответа
[...] мигает ответ на нано или миллисекунду пользователю [....] в новом окне [...]
Миллисекунда слишком коротка (как для игрока-человека, понимающего постоянство зрения, так и для интерпретатора Python); Ваш экран, вероятно, обновляется с частотой 60 Гц. Подумайте о мигании не менее одной десятой секунды (и, возможно, более того, вам нужно будет поэкспериментировать, и вы можете настроить задержку мигания или настраиваемый период). Как это сделать, зависит от используемого вами набора виджетов.
Если вы используете что-то выше GTK, вам нужно найти привязку Python к g_timeout_add, см. Также это.
Если вы используете что-то выше libSDL (например, pygame_sdl2), вам нужно что-то, связанное с его таймерами.
Есть много других виджетов или графических структур, которые можно использовать из Python, и вам нужно выбрать один (смотрите также в PyQt). У каждого из них есть свой способ справиться с синхронизацией, задержками, окнами, графическим отображением текста внутри окна и т. Д.
Если ваша система Linux, см. Также time(7) для общего обзора связанных со временем вещей. Циклы событий (как в графических библиотеках) создаются над системным вызовом мультиплексирования, таким как poll (2) (или старый select
, так далее...).
Вам нужно потратить несколько дней, читая больше, выбирая свой графический инструментарий, прежде чем кодировать одну строчку кода своей игры (для которой может потребоваться больше кода, чем вы думаете сейчас).
Я думаю, что ближе всего к этому влиянию вы можете просто print
на консоль, но не print
новая строка (\n
), только возврат каретки (\r
). Таким образом, вы можете написать текст через пару миллисекунд. Нам нужно знать длину того, что мы печатаем, чтобы мы могли быть уверены, что полностью переопределим его при следующем отпечатке.
Код для этого будет выглядеть примерно так:
import time
ms = 100
s = 'cp1'
print(s, end='\r')
time.sleep(ms / 1000)
print(' ' * len(s))