У меня есть приложение python2 / tkinter, где мне нужно кодировать сложную анимацию на холсте после нажатия кнопки. Под сложным я подразумеваю, что он имеет много этапов (десятков), каждый из которых зависит от состояния множества переменных, заданных на предыдущем этапе, таким образом, что что-то вроде цикла for на самом деле не справится. В псевдокоде:
1 set a bunch of variables
2 update the canvas
3 wait a couple hundred milliseconds
4 adjust the variables
5 update the canvas (differently than before)
6 wait
И повторите это много раз. Это была бы длинная функция, выписанная. Я борюсь с лучшим способом, чтобы закодировать это.
- Наивный способ просто поместить этот код в функцию обратного вызова кнопки с вызовами
time.sleep()
и методами рисования холста, конечно, не будет работать, так как поток GUI не может быть связан так долго.
- Я прочитал в Tkinter, что это не совсем потокобезопасно, поэтому размещение этого кода в другом потоке, который напрямую обновляет холст, вызывает проблемы.
- Использование метода
after()
привело бы к некоторому действительно неуклюжему коду, где мне пришлось бы создавать десятки маленьких функций для каждого этапа анимации, каждая из которых нуждалась бы в доступе к переменным анимации, которые должны были бы жить снаружи. Области функций. Или, возможно, перекодировать все это как некий конечный автомат, который также был бы очень неудобным.
Есть ли какая-то другая техника, о которой я не думаю? Или, может быть, другой инструментарий, более подходящий для такого рода вещей?