2017-06-15 1 views
2

Ich versuche, ein Programm, das den Benutzer fragt, um eine Form und wie viele dieser Form in Python-Schildkröte zu zeichnen. Ich weiß nicht, wie man die Dialogbox macht, damit der Benutzer sagen kann, wie viele hinzuzufügen und es richtig laufen lassen. Jede Hilfe wird großartig sein! Hier ist mein Code so weit:Frage Benutzer, welche Form zu zeichnen und wie viele in Python Schildkröte

import turtle 

steps = {"triangle": 3, "square": 4, "pentagon": 5, "hexagon": 6, "octagon": 7} 

#this is the dialogue box for what shape to draw and moving it over a bit so the 
#next shape can be seen 
def onkey_shape(): 
    shape = turtle.textinput("Enter a shape", "Enter a shape: triangle, 
square, pentagon, hexagon, octagon") 
    if shape.lower() in steps: 
     turtle.forward(20) 
     set_shape(shape.lower()) 
    turtle.listen() 

def set_shape(shape): 
    global current_shape 
    turtle.circle(40, None, steps[shape]) 
    current_shape = shape 





turtle.onkey(onkey_shape, "d") 

turtle.listen() 

turtle.mainloop() 

Antwort

0

So wie Sie textinput() verwendet, um Ihre Form zu erhalten, können Sie numinput() verwenden können, um Ihre zählen, wie viele Formen zu erhalten:

count = numinput(title, prompt, default=None, minval=None, maxval=None) 

Hier ist ein Nacharbeiten des Codes , die beispielsweise Zwecke nur konzentrische Formen zieht - man kann sie ziehen, wo Sie wollen:

import turtle 

STEPS = {"triangle": 3, "square": 4, "pentagon": 5, "hexagon": 6, "octagon": 7} 

# this is the dialogue box for what shape to draw and 
# moving it over a bit so the next shape can be seen 

def onkey_shape(): 
    shape = turtle.textinput("Which shape?", "Enter a shape: triangle, square, pentagon, hexagon or octagon") 

    if shape.lower() not in STEPS: 
     return 

    count = turtle.numinput("How many?", "How many {}s?".format(shape), default=1, minval=1, maxval=10) 

    turtle.penup() 
    turtle.forward(100) 
    turtle.pendown() 

    set_shape(shape.lower(), int(count)) 

    turtle.listen() 

def set_shape(shape, count): 
    turtle.penup() 
    turtle.sety(turtle.ycor() - 50) 
    turtle.pendown() 

    for radius in range(10, 10 - count, -1): 
     turtle.circle(5 * radius, steps=STEPS[shape]) 
     turtle.penup() 
     turtle.sety(turtle.ycor() + 5) 
     turtle.pendown() 


turtle.onkey(onkey_shape, "d") 
turtle.listen() 

turtle.mainloop() 

der schwierige Teil, dass Sie herausgefunden, ist, dass normalerweise nur wir nennen turtle.listen() einmal in einem Turtle-Programm, aber Aufruf textinput() oder numinput() schaltet den Listener auf das Dialogfeld, das erscheint, so müssen wir erneut turtle.listen() aufrufen, nachdem die Dialoge fertig sind.

+0

FANTASTISCH Vielen Dank! Das ist genau das, was ich brauchte! –

Verwandte Themen