【问题标题】:Filling rectangles with colors in python using turtle使用乌龟在python中用颜色填充矩形
【发布时间】:2016-05-26 23:50:09
【问题描述】:

如何绘制一个矩形,其中:最小的高度为 5,每个连续的矩形添加第一个矩形的高度,即 5、10、15,...。每个矩形的宽度为 200。线条的颜色为蓝色,填充颜色从上到下分别为 gray0、grey14、grey28、...。 我怎样才能做到这一点并确保图片适合屏幕? (每个新矩形都低于前一个)

这是我目前所拥有的,但我不知道如何填写:

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()

【问题讨论】:

    标签: python turtle-graphics


    【解决方案1】:
    def filled_rectangle(t, l, w):
        t.begin_fill()
        for i in range(2):
                t.right(90)
                t.forward(l)
                t.right(90)
                t.forward(w)
        t.end_fill()
    

    【讨论】:

    • t.endfill() -> t.end_fill()
    【解决方案2】:

    填充矩形很简单,正如@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()
    

    宽度比高度更随意,但我把它作为字体大小和加倍的函数,所以我可以在矩形中写下阴影名称:

    我将轮廓颜色恢复为黑色而不是蓝色,因此附近会有纯黑色来比较灰色阴影。

    【讨论】:

    • @NickA,我理解并清楚地说明了他的文字,但他的示例代码没有——它将矩形大小加倍,2.5、5、10、20、40、80,...运行它。由于他的问题是关于居中和填充颜色,我相信我的示例代码解决了这两个问题,即使存在这种未解决的差异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多