Привяжите радиус круга к размеру окна в Python Turtle - PullRequest
0 голосов
/ 23 мая 2018

В Python turtle, при рисовании объектов на экране, если был способ привязать радиус круга к ширине или высоте окна, чтобы его можно было изменить, изменив размер окна?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Вот мой альтернативный вариант Нажмите, чтобы настроить чертеж для измененного размера окна. Решение:

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 событие.Теперь, когда вы изменяете размер окна, трюк системы координат, заданный ранее, автоматически запускает , поэтому вам не нужно нажимать на окно - это просто происходит.

0 голосов
/ 23 мая 2018

Да, это возможно.

Вам нужно создать событие, которое черепаха будет слушать: в следующем примере, если вы щелкнете по черепахе, круг будет вдвое меньше ширины холста.будет нарисован.
Если вы измените размер холста и снова нажмете на черепаху, новый круг наполовину новой ширины будет перерисован.

import turtle


def start(dummy_a, dummy_b):
    t.reset()
    y, x = screen.window_height(), screen.window_width()
    t.home()
    t.circle(x/4)


if __name__ == '__main__':

    screen = turtle.Screen()
    t = turtle.Turtle()

    t.onclick(start, add=True)
    screen.listen()
    turtle.done()
...