web-dev-qa-db-ja.com

python turtleで図形を色で塗りつぶす

図形を色で塗りつぶそうとしていますが、実行しても表示されません。これにクラスを使用することは想定されていませんか?私はPython-3に習熟しておらず、クラスの使用方法をまだ学んでいます

import turtle

t=turtle.Turtle()
t.speed(0)


class Star(turtle.Turtle):
    def __init__(self, x=0, y=0):
        turtle.Turtle.__init__(self)
        self.shape("")
        self.color("")
#Creates the star shape    
    def shape(self, x=0, y=0):
        self.fillcolor("red")
        for i in range(9):
        self.begin_fill()
        self.left(90)
        self.forward(90)
        self.right(130)
        self.forward(90)
        self.end_fill()
#I was hoping this would fill the inside        
    def octagon(self, x=0.0, y=0.0):
        turtle.Turtle.__init__(self)

    def octa(self): 
        self.fillcolor("green")
        self.begin_fill()
        self.left(25)
        for x in range(9):
            self.forward(77)
            self.right(40)

#doesn't run with out this
a=Star()
2
geek2001

プログラムの問題:実際には使用しないカメの速度を作成して設定します。 turtle.pyにはすでにshape()メソッドがあるので、それをオーバーライドして別の意味にするのではなく、新しい名前を選択してください。 begin_fill()end_fill()をループ内に配置するのではなく、ループを囲むようにします。無効な引数を使用して独自のshape()メソッドを呼び出します。

コードを次のように修正すると、上記の問題に対処できます。

from turtle import Turtle, Screen

class Star(Turtle):
    def __init__(self, x=0, y=0):
        super().__init__(visible=False)
        self.speed('fastest')
        self.draw_star(x, y)

    def draw_star(self, x=0, y=0):
        """ Creates the star shape """

        self.penup()
        self.setposition(x, y)
        self.pendown()

        self.fillcolor("red")

        self.begin_fill()

        for _ in range(9):
            self.left(90)
            self.forward(90)
            self.right(130)
            self.forward(90)

        self.end_fill()

t = Star()

screen = Screen()
screen.exitonclick()

enter image description here

1
cdlane