使用turtle在python中用颜色填充矩形

使用turtle在python中用颜色填充矩形,python,turtle-graphics,Python,Turtle Graphics,如何绘制一个矩形,其中:最小的高度为5,每个连续的矩形加上第一个矩形的高度,即5、10、15…。每个矩形的宽度为200。线条颜色为蓝色,填充颜色从上到下为灰色0、灰色14、灰色28等…。 我如何才能做到这一点,并确保图片适合屏幕? (每个新矩形位于前一个矩形的下方) 到目前为止,这就是我所拥有的,但我不知道如何填补它: import turtle def rectangle(t, l, w): for i in range(2): t.right(90)

如何绘制一个矩形,其中:最小的高度为5,每个连续的矩形加上第一个矩形的高度,即5、10、15…。每个矩形的宽度为200。线条颜色为蓝色,填充颜色从上到下为灰色0、灰色14、灰色28等…。 我如何才能做到这一点,并确保图片适合屏幕? (每个新矩形位于前一个矩形的下方)

到目前为止,这就是我所拥有的,但我不知道如何填补它:

import turtle

def rectangle(t, l, w):
    for i in range(2):
                t.right(90)
                t.forward(l)
                t.right(90)
                t.forward(w)

me = turtle.Turtle()
me.color('blue')
me.pensize(2)
me.penup()
l = 2.5
w = 250
x = 50
y = 150

for i in range(9):
    rectangle(me, l, w)
    l = l*2
    w = w
    x = x
    y = y
    me.setposition(x,y)
    me.pendown()

填充矩形很简单,正如@JoranBeasley所述。但是,您的“最小值为5”和“确保图片适合屏幕”的说明存在冲突。我们需要使矩形适合屏幕,并采用我们得到的任何起始尺寸。由于每个矩形的高度都是下一个矩形的两倍,因此起始矩形是可用高度除以2(因为我们将加倍),并提高到您想要表示的灰度数的幂次方:

from turtle import Turtle, Screen

def rectangle(t, l, w):
    t.begin_fill()
    for _ in range(2):
        t.right(90)
        t.forward(l)
        t.right(90)
        t.forward(w)
    t.end_fill()

screen = Screen()

me = Turtle(visible=False)
me.penup()

GREYS = [  # adjust to taste
    ('grey0' , '#000000'),
    ('grey14', '#242424'),
    ('grey28', '#474747'),
    ('grey42', '#6B6B6B'),
    ('grey56', '#8F8F8F'),
    ('grey70', '#B3B3B3'),
    ('grey84', '#D6D6D6'),
    ('grey98', '#FAFAFA'),
    ]

WIDTH = 2 ** (len(GREYS) + 1)  # depends on font and keep below screen.window_width()
x = WIDTH / 2  # rectangle() draws right to left -- move x right to center drawing

canvas_height = screen.window_height() * 0.90  # use most of the space available
length = canvas_height / 2 ** len(GREYS)  # determine starting length to fill canvas
y = canvas_height / 2  # begin at the top of canvas

fontsize = 1

for name, color in GREYS:
    me.fillcolor(color)
    me.setposition(x, y)

    me.pendown()
    rectangle(me, length, WIDTH)
    me.penup()

    if 4 <= fontsize <= length:
        font = ("Arial", fontsize, "bold")
        me.setposition(0, y - length / 2 - fontsize / 2)
        me.write(name, align="center", font=font)
    fontsize *= 2

    y -= length
    length *= 2

screen.exitonclick()
从海龟导入海龟,屏幕
def矩形(t、l、w):
t、 开始填充()
对于范围(2)内的uu:
t、 右(90)
t、 前进(l)
t、 右(90)
t、 前进(w)
t、 (完)
screen=screen()
me=海龟(可见=假)
我
灰色=[#适应口味
('grey0','000000'),
(‘灰色’、‘#2424’),
(‘grey28’、‘#474747’),
('grey42','#6b'),
('grey56','8f8f'),
('grey70','#b3'),
(‘灰色84’、‘#d6’),
(‘grey98’,‘FAFAFA’),
]
宽度=2**(长(灰色)+1)#取决于字体并保持在屏幕下方。窗口_宽度()
x=宽度/2#矩形()从右向左绘制--将x向右移动到绘图中心
canvas_height=screen.window_height()*0.90#使用大部分可用空间
长度=画布高度/2**len(灰色)#确定填充画布的起始长度
y=画布高度/2#从画布顶部开始
fontsize=1
对于名称,颜色为灰色:
me.fillcolor(颜色)
me.设定位置(x,y)
我
矩形(me、长度、宽度)
我

如果4
t.endfill()
->
t.end\u fill()
@NickA,我理解并清楚地看到了他的文字,但他的示例代码没有——它将矩形大小加倍,2.5,5,10,20,40,80。。。运行它。因为他的问题是关于居中和填充颜色,所以我相信我的示例代码解决了这两个问题,即使存在这个未解决的差异。
from turtle import Turtle, Screen

def rectangle(t, l, w):
    t.begin_fill()
    for _ in range(2):
        t.right(90)
        t.forward(l)
        t.right(90)
        t.forward(w)
    t.end_fill()

screen = Screen()

me = Turtle(visible=False)
me.penup()

GREYS = [  # adjust to taste
    ('grey0' , '#000000'),
    ('grey14', '#242424'),
    ('grey28', '#474747'),
    ('grey42', '#6B6B6B'),
    ('grey56', '#8F8F8F'),
    ('grey70', '#B3B3B3'),
    ('grey84', '#D6D6D6'),
    ('grey98', '#FAFAFA'),
    ]

WIDTH = 2 ** (len(GREYS) + 1)  # depends on font and keep below screen.window_width()
x = WIDTH / 2  # rectangle() draws right to left -- move x right to center drawing

canvas_height = screen.window_height() * 0.90  # use most of the space available
length = canvas_height / 2 ** len(GREYS)  # determine starting length to fill canvas
y = canvas_height / 2  # begin at the top of canvas

fontsize = 1

for name, color in GREYS:
    me.fillcolor(color)
    me.setposition(x, y)

    me.pendown()
    rectangle(me, length, WIDTH)
    me.penup()

    if 4 <= fontsize <= length:
        font = ("Arial", fontsize, "bold")
        me.setposition(0, y - length / 2 - fontsize / 2)
        me.write(name, align="center", font=font)
    fontsize *= 2

    y -= length
    length *= 2

screen.exitonclick()