мой алгоритм работает нормально, он др aws кривая и изменяет размер при изменении размера окна.
Нет, это не так. Ваш рисунок никогда не масштабируется, он остается того же размера. И ваша main()
функция, которая устанавливает код масштабирования, никогда не вызывается, как это следует из вызова mainloop()
, который передает управление обработчику событий tkinter:
my_win.mainloop()
main()
Использование Таймер событий является неправильным способом go об этой проблеме. Однако, так как черепаха не отображает событие изменения размера основного окна tkinter, давайте поиграем с этой моделью, а не опускаемся до уровня tkinter. Вместо этого я бы сделал это следующим образом:
from turtle import Turtle, Screen
def hilbert_curve(turtle, A, parity, n):
'''
Draw the hilbert curve using recursion.
Arguments:
turtle is for the Turtle,
A is the length of the lines,
parity is for inverting the direction,
and n is for the order
'''
if n < 1:
return
turtle.left(parity * 90)
hilbert_curve(turtle, A, - parity, n - 1)
turtle.forward(A)
turtle.right(parity * 90)
hilbert_curve(turtle, A, parity, n - 1)
turtle.forward(A)
hilbert_curve(turtle, A, parity, n - 1)
turtle.right(parity * 90)
turtle.forward(A)
hilbert_curve(turtle, A, - parity, n - 1)
turtle.left(parity * 90)
def main():
order = 4
parity = 1
length = 100 / (4 * order - 1)
def onResize():
# Rescale drawing when changing window size (the hard way)
turtle.reset()
screen.setworldcoordinates(0, 0, 100, 100)
hilbert_curve(turtle, length, parity, order)
screen.update()
screen.ontimer(onResize, 1000)
screen = Screen()
screen.tracer(False)
turtle = Turtle()
onResize()
screen.mainloop()
main()
Т.е. поддерживать постоянные виртуальные координаты независимо от размера окна и перерисовывать кривую, чтобы соответствовать текущему размеру окна. Кстати, Разве я не написал этот код кривой Гильберта ? Убедитесь, что вы проголосовали, откуда вы взяли!