2015-01-02 51 views
0

所以我的目標是在烏龜屏幕上的某個區域內單擊時發生一個函數。 因此,當我的龜畫一個正方形,然後在廣場內點擊時,我需要發生一些事情。在python龜中定義一個區域

例子:

turtle.onscreenclick(turtle.goto) 

for i in range(4): 
     turtle.forward(30) 
     turtle.left(90) 

if turtle.position() == (within square region): 
     Activate function() 
+2

類型取決於你的方形區域是如何定義的,不是嗎? –

回答

0

你需要弄清楚由方規定的區域的大小,以便您可以比較下鼠標稍後點擊職位,看看他們是否在裏面。這裏有一個完整的程序,首先允許通過點擊定義正方形的左下角,繪製它,然後每次在矩形區域內單擊鼠標時調用指定的函數。

import turtle 

def draw_square(x, y): 
    global target_region 

    turtle.penup() 
    turtle.goto(x, y) 
    turtle.setheading(0) 
    turtle.pendown() 
    square = [] 
    for i in range(4): 
     square.append(turtle.pos()) # Save turtle coords 
     turtle.forward(30) 
     turtle.left(90) 

    # Find min and max coordinates of region 
    min_x = min(square, key=lambda p: p[0])[0] 
    min_y = min(square, key=lambda p: p[1])[1] 
    max_x = max(square, key=lambda p: p[0])[0] 
    max_y = max(square, key=lambda p: p[1])[1] 
    target_region = [min_x, min_y, max_x, max_y] 

    turtle.hideturtle() 
    turtle.onscreenclick(check_click) # Switch to next event handler 

def check_click(x, y): 
    if (target_region[0] <= x <= target_region[2] and 
     target_region[1] <= y <= target_region[3]): # Within square region? 
     within_square_region_function() # Call activate function 

def within_square_region_function(): 
    print('clicked in square') 

turtle.onscreenclick(draw_square) # Set initial event handler 
turtle.mainloop() 
+0

這讓我有一些想法,謝謝! – user2848418

0

如果你的意思是讓goto只有正方形內:

import turtle 

def goto_inside(x, y): 
    if 0 <= x <= 30 and 0 <= y <= 30: 
     turtle.goto(x, y) 

turtle.onscreenclick(goto_inside) 

# draw a square 30x30 
for i in range(4): 
    turtle.forward(30) 
    turtle.left(90) 

# turtle.mainloop() 
+0

我想我說錯了我的問題。當您在廣場內點擊時,烏龜必須在點擊位置使用其郵票功能。但只在廣場內,這是我的問題。在戶外點擊時沒有任何反應。 – user2848418