Можно ли изменить ход пера черепахи?

Мне нужно нарисовать гистограмму, используя графику черепахи Python, и я подумал, что было бы проще сделать перо толстым квадратом, чтобы я мог рисовать такие полосы и не беспокоиться о создании десятков прямоугольников и их заполнении.

Однако, когда я задаю форму черепахи с помощью turtle.shape('square'), это меняет только внешний вид пера, но не влияет на фактический рисунок:

введите описание изображения здесь

Есть ли способ заставить черепаху рисовать прямоугольную обводку, будь то с помощью встроенных методов или путем изменения файла черепахи?

Я НЕ хочу закругленных краев, например:

введите описание изображения здесь


person Matt    schedule 02.12.2014    source источник
comment
Вы пробовали turtle.pensize (int), где аргумент - размер в PX?   -  person adanot    schedule 02.12.2014
comment
Да, это просто увеличивает эллипс.   -  person Matt    schedule 02.12.2014


Ответы (4)


Чтобы ответить на вопрос, заданный в заголовке: Нет, изменить ход пера напрямую невозможно (см. ответ cdlane о возможном способе сделать это, изменив жестко запрограммированные значения из tkinter).

Однако я нашел обходной путь для варианта использования, представленного в теле вопроса.

Пользовательскую форму пера (в данном случае представляющую точную форму и размер полосы) можно зарегистрировать следующим образом:

screen.register_shape("bar", ((width / 2, 0), (-width / 2, 0), (-width / 2, height), (width / 2, height)))`

Затем мы можем просто перебрать каждую полосу, обновить форму пера новыми значениями и использовать turtle.stamp для нанесения готовых полосок на график, рисование не требуется.

person Matt    schedule 02.12.2014

Похоже, изменить форму самого штриха пера невозможно. turtle.shape('square') изменяет только форму черепахи, но не штрих пера. Я предлагаю уменьшить размер пера и создать функцию для рисования прямоугольника. Вы можете использовать это для рисования полос.

person Schickmeister    schedule 02.12.2014
comment
turtle.shape("square") работает, пока вы используете _2 _-- см. этот ответ. - person ggorlen; 15.10.2020

У меня есть два решения этой проблемы, которые я использовал в различных программах.

Первый вариант - это вариант вашего штампа. Вместо того, чтобы использовать screen.register_shape() для регистрации пользовательского многоугольника для каждой линии, используйте квадратную черепаху и для каждой линии turtle.turtlesize() ее в прямоугольник, который вы хотите нанести:

from turtle import Turtle, Screen

STAMP_SIZE = 20  # size of the square turtle shape

WIDTH, LENGTH = 25, 125

yertle = Turtle(shape="square")
yertle.penup()

yertle.turtlesize(WIDTH / STAMP_SIZE, LENGTH / STAMP_SIZE)

yertle.goto(100 + LENGTH//2, 100)  # stamps are centered, so adjust X

yertle.stamp()

screen = Screen()
screen.exitonclick()

Мое другое решение, когда мне нужно рисовать вместо штамп, - это добраться до tkinter, лежащего в основе черепахи, и изменить жестко запрограммированную форму конца строки черепахи:

from turtle import Turtle, Screen
import tkinter as _

_.ROUND = _.BUTT

WIDTH, LENGTH = 25, 125

yertle = Turtle()
yertle.width(WIDTH)
yertle.penup()

yertle.goto(100, 100)

yertle.pendown()

yertle.forward(LENGTH)

screen = Screen()
screen.exitonclick()
person cdlane    schedule 11.02.2017

Используйте несколько штампов, например:

import turtle

turtle.shape("square")
for count in range(x):
    turtle.stamp()
    turtle.forward(1)
person TriHrd    schedule 03.08.2018