Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 填充由列表绘制的形状_Python_Python 3.x - Fatal编程技术网

Python 填充由列表绘制的形状

Python 填充由列表绘制的形状,python,python-3.x,Python,Python 3.x,我正在做一个面向对象编程的项目,我们的任务是画一个雪人,类主要是形状。我把整个雪人都画出来了,但是当我试图填充这个正方形的时候,因为某种原因,它会填充一个三角形 import turtle class Shape(object): def __init__(self, pensize = 1, pencolor = "black"): self.pensize = pensize self.pencolor = pencolor class Li

我正在做一个面向对象编程的项目,我们的任务是画一个雪人,类主要是形状。我把整个雪人都画出来了,但是当我试图填充这个正方形的时候,因为某种原因,它会填充一个三角形

import turtle

class Shape(object):

    def __init__(self,  pensize = 1, pencolor = "black"):

        self.pensize = pensize
        self.pencolor = pencolor

class Line(Shape):
    def __init__(self, start = (0.0, 0.0), end = (50.0, 0.0),
                 pencolor = "black", pensize = 1):

        Shape.__init__(self,pensize,pencolor)
        self.start = start
        self.end = end

    def __str__(self):
        return "Line(beg:{},end:{})".format(self.start ,self.end)

    def draw(self, pen):
        """draw the line using the provided pen"""
        pen.pensize(self.pensize)
        pen.pencolor(self.pencolor)
        pen.up()
        pen.goto(self.start)
        pen.down()
        pen.goto(self.end)

class Square(object):
    def __init__(self, pos = (0.0,0.0), size = 50):

        self.pos = pos
        x ,y = pos
        self.size = size
        self.side_lines = [Line((x, y), (x, y + size)),  # front, left
                           Line((x, y), (x + size, y)),  # front, bottom
                           Line((x + size, y), (x + size, y + size)),  # front, right
                           Line((x, y + size), (x + size, y + size))]  # front, top

    def __str__(self):
        return "Square(pos:{},size:{})".format(self.pos, self.size)

    def draw(self, pen):
        for l in self.side_lines:
            l.draw(pen)

class Snow_man(Shape):
    def __init__(self, pos = (0.0, 0.0)):
        self.pos= pos

    def __str__(self):
        return "Drawing a Snowman"

    def draw(self, pen):
        brim = Line((-400, 300), (-200, 300), "black", 5)
        brim.draw(pen)
        pen.color("black")
        pen.begin_fill()
        topHat = Square((-360, 300), 120)
        topHat.draw(pen)
        pen.end_fill()

pen= turtle.Turtle()
snowman= Snow_man()
snowman.draw(pen)
turtle.exitonclick()

首先,您要从海龟的当前位置调用begin_fill(),当您要在正方形的拐角处调用begin_fill()时,海龟的当前位置是帽檐的末端

因此,在使用begin_fill()之前,使用类似pen.goto(-360300)的东西会将海龟带到起始位置。然后调用begin_fill()

接下来是如何绘制线条,如果线条是从一个角到另一个角绘制的,而不是像一个简单的示例那样使用fd()和right()命令来回绘制,效果会更好

being_fill()
fd(50)
right(90)
fd(50)
right(90)
fd(50)
right(90)
fd(50)
end_fill()
会填满一个正方形。所以我觉得你需要重新调整你画的边线。比如它的起始坐标等等