使用turtle在python中用颜色填充矩形
如何绘制一个矩形,其中:最小的高度为5,每个连续的矩形加上第一个矩形的高度,即5、10、15…。每个矩形的宽度为200。线条颜色为蓝色,填充颜色从上到下为灰色0、灰色14、灰色28等…。 我如何才能做到这一点,并确保图片适合屏幕? (每个新矩形位于前一个矩形的下方) 到目前为止,这就是我所拥有的,但我不知道如何填补它:使用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)
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、长度、宽度)
我
如果4t.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()