2017-06-15 2 views
2

私は、図形を描画するようにユーザーに求めているプログラムを作ろうとしています。私は、ダイアログボックスをどのようにしてユーザが追加して正しく動作させるかを言うことができるようにする方法を知らない。どんな助けも素晴らしいでしょう!ここに私のコードは、これまでのところです:描画する図形とPythonのカメの数を問い合わせてください

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

答えて

0

あなたの形状を取得するためにtextinput()を使用と同じように、あなたはどのように多くの形状のあなたのカウントを取得するためにnuminput()を使用することができます。

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

はここにあなたのコードのリワークです、例示の目的のためだけの同心形状を描画する - あなたがそれらを配置したい場所を、あなたはそれらを描く:

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

トリッキーな部分、あなたが考え出したことを、通常、我々は唯一の呼び出しということですturtle.listen()をタートルのプログラムで1回呼び出すと、textinput()またはnuminput()がリスナーをポップアップするダイアログボックスに切り替えるので、ダイアログが終了した後に明示的にturtle.listen()を呼び出す必要があります。

+0

すごくありがとう!これは私が必要としていたものです! –

関連する問題