2017-05-25 6 views
0

私は、タートルのモジュールを使ってPythonで作業していたプロジェクトのチェックボックスを作り直そうとしていました。これを行うには、チェックボックス作成時のカメの色は何もなく、ユーザーがボックスをクリックすると色が変わると想像しました。私は変数を使用しましたが、動作しないようです。Pythonで後でタートルの描画の色を変更する

color = ((0,255,0)) 
def Options(): 
    global color 
    opts = turtle.Screen() 
    opts.setup(800,800) 
    opts.reset() 
    opts.title('Options') 
    turtle.onscreenclick(None) 
    boxes = turtle.Turtle() 
    boxes.ht() 
    boxes.up() 
    boxes.sety(300) 
    boxes.write('Character Control', align = 'center', font = ('Verdana', 30, 'normal')) 
    boxes.goto(-200,250) 
    boxes.pd() 
    boxes.begin_fill() 
    for i in range(4): 
     boxes.fd(50) 
     boxes.rt(90) 
    boxes.color(color) 
    boxes.end_fill() 
    boxes.up() 
    boxes.goto(0,207) 
    boxes.write('Attracted to food.', align = 'center', font = ('Verdana', 20, 'normal')) 
    boxes.goto(-200,180) 
    boxes.pd() 
    for i in range(4): 
     boxes.fd(50) 
     boxes.rt(90) 
    boxes.up() 
    boxes.goto(14, 140) 
    boxes.write('Attracted to poison.', align = 'center', font = ('Verdana', 20, 'normal')) 
    turtle.listen() 
    turtle.onscreenclick(checked) 
def checked(x,y): 
    global color 
    if x in range(-200, -150) and y in range(200,250): 
     color = (255, 0, 0) 

答えて

0

当面の問題は、この機能である:

def checked(x,y): 
    global color 
    if x in range(-200, -150) and y in range(200,250): 
     color = (255, 0, 0) 

xyパラメータは浮動小数点数ですので、整数の範囲で見られることはありません。代わりにしてみてください:私は チェックボックスを作る時のカメの色は何もないだろうし、ユーザーがボックスをクリックすると、それは 色を変えるだろうと想像し

def checked(x, y): 
    global color 

    if -200 < x < -150 and 200 < y < 250: 
     color = (255, 0, 0) 

正常にボックスをクリックしてcolor変数をリセットすると、タートルやボックスには影響しません。単に変数を設定するだけです。ボックスに何かをさせるのに十分なコードがありません。

ただし、これは問題については間違った方法です。もっと簡単なアプローチは、各チェックボックスをカメにして、スクリーン全体のイベントハンドラではなく個々のonclick()イベントハンドラを設定することです。既存のコードの例を次に示します。

import turtle 

screen = turtle.Screen() 
screen.colormode(255) 

color = (0, 255, 0) 

STAMP_SIZE = 20 

box1 = box2 = None 

def Options(): 
    global box1, box2 

    opts = turtle.Screen() 
    opts.setup(800, 800) 
    opts.reset() 
    opts.title('Options') 

    boxes = turtle.Turtle(visible=False) 
    boxes.up() 
    boxes.sety(300) 
    boxes.write('Character Control', align='center', font=('Verdana', 30, 'normal')) 
    boxes.up() 

    box1 = turtle.Turtle('square', visible=False) 
    box1.shapesize(50/STAMP_SIZE) 
    box1.penup() 
    box1.goto(-200, 225) 
    box1.color('black', color) 
    box1.onclick(checked1) 
    box1.showturtle() 

    boxes.goto(0, 207) 
    boxes.write('Attracted to food.', align='center', font=('Verdana', 20, 'normal')) 

    box2 = turtle.Turtle('square', visible=False) 
    box2.shapesize(50/STAMP_SIZE) 
    box2.penup() 
    box2.goto(-200, 155) 
    box2.color('black', 'white') 
    box2.onclick(checked2) 
    box2.showturtle() 

    boxes.goto(14, 140) 
    boxes.write('Attracted to poison.', align='center', font=('Verdana', 20, 'normal')) 

def checked1(x, y): 
    box2.fillcolor('white') 
    box1.fillcolor(color) 

def checked2(x, y): 
    box1.fillcolor('white') 
    box2.fillcolor(color) 


Options() 

turtle.mainloop() 

ここでチェックボックスの1つをクリックすると、緑色と他の白色に変わります。これは、チェックボックスがあなたが望むことをするための基礎を与えるはずです。

+0

ありがとうございます。両方のチェックボックスを選択できるかどうか疑問に思っていました。あなたはそれに取り組む時間を費やす必要はありません。 @cdlane – rbhog

+0

@rbhog、はい、あなたはそれらを独立したチェックボックスにすることができます。 'checked1()'と 'checked2()'イベントハンドラのロジックを変更するだけです。例えば、 'checked1()'が 'box1'の塗りつぶし色を見て、他の状態に切り替えるだけです。 – cdlane

+0

それは私が私がする必要があると思ったものです。 – rbhog

関連する問題