Вот мой альтернативный вариант Нажмите, чтобы настроить чертеж для измененного размера окна. Решение:
from turtle import Turtle, Screen
def onResize(x=0, y=0):
screen.onclick(None) # disable events inside event handler
screen.setworldcoordinates(-1, -1, 1, 1)
screen.onclick(onResize)
screen = Screen()
onResize() # establish initial coordinate system
turtle = Turtle(visible=False)
turtle.penup()
turtle.sety(-0.5)
turtle.pendown()
turtle.circle(0.5, steps=30)
screen.mainloop()
Обратите внимание, что мы не перерисовываем что-либо, мы просто перенастраиваемнаши виртуальные координаты (единичный квадрат в этом примере) и позволяют черепахе перерисовывать вещиЕсли мы хотим заглянуть под капот, мы можем сделать еще один шаг:
import tkinter as tk
from turtle import RawTurtle, TurtleScreen, ScrolledCanvas
class MyTurtleScreen(TurtleScreen):
def __init__(self, cv):
super().__init__(cv)
cv.bind('<Configure>', self.onResize)
def onResize(self, event=None):
self.setworldcoordinates(-1, -1, 1, 1)
root = tk.Tk()
canvas = ScrolledCanvas(root)
canvas.pack(fill=tk.BOTH, expand=tk.YES)
screen = MyTurtleScreen(canvas)
screen.onResize() # establish initial coordinate system
turtle = RawTurtle(screen, visible=False)
turtle.penup()
turtle.sety(-0.5)
turtle.pendown()
turtle.circle(0.5, steps=30)
screen.mainloop()
Это обобщенный пример встраивания черепахи в tkinter , за исключением того, что я настроил TurtleScreen
, чтобы принять Configure
событие.Теперь, когда вы изменяете размер окна, трюк системы координат, заданный ранее, автоматически запускает , поэтому вам не нужно нажимать на окно - это просто происходит.