使用 python 3 龟 onscreenclick 方法无法返回值

问题描述

使用 onclicks 方法修改我的第一个 python 海龟程序(它有效)失败。 我无法让它返回在函数之外使用的值。 很明显,我需要更好地理解作用域和变量。 但仍然无法返回(我在一个小测试程序中使用了 return ok)。 这是我的代码,除了返回之外还可以工作。

import turtle
screen=turtle.Screen();t1=turtle.Turtle()
x1=y1=x2=y2=0;clicks=0

def mouse_click(x,y): 
    global clicks,x1,y1,x2,y2

    clicks = clicks + 1
    t1.penup()
    screen.onscreenclick(None)
    t1.goto(x,y)
    screen.onscreenclick(mouse_click)
    if clicks==2:#bypass clicks==1 as automatic at start giving unwanted 0,0
        x1 = t1.xcor()
        y1 = t1.ycor()
    if clicks==3:
        x2 = t1.xcor()
        y2 = t1.ycor()
    if clicks==4:
        turtle.exitonclick()
    
    print("inside x1 y1 x2 y2",clicks,y2)
    return clicks,y2

#MAIN

#get clicks screen.onscreenclick(mouse_click)

#get returned coordinates for further use - doesnt work! clicks,y2=mouse_click(x1,y1) print("outside clicks x1 y1 x2 y2",y2)

#end screen.mainloop()

解决方法

您需要在每行前放置 4 个空格,以保留格式。

您似乎正在尝试生成几个 XY 坐标对。

并不是说回调有内循环和外循环。 https://en.wikipedia.org/wiki/Callback_(computer_programming)

这就是您已绑定到 onscreenclick() 的内容。您需要考虑点击次数,并从那时起更改回调中发生的情况...

或者完全重新定义你的回调,如果绝对需要的话。 turtle.onscreenclick(new_callback_function,add=False)

#! /usr/bin/python3

from turtle import Turtle,Screen
turtle,screen = Turtle(),Screen()

##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

clicks,x1,y1,x2,y2 = 0,0
turtle.penup()

def click_callback( x,y ):
    global clicks,y2
    clicks = clicks +1

    ##  modulo:  divide by 2,check the remainder
    if clicks %2 == 1:  ##  odd step
        x1,y1 = x,y
        turtle.goto( x1,y1 )

        print( f"odd click {clicks}:  {x1},{y1},{x2},{y2}" )
    else:  ##  even step
        x2,y2 = x,y
        turtle.goto( x2,y2 )

        print( f"even click {clicks}:  {x1},{y2}" )
    ##  return clicks,y2

screen.onscreenclick( click_callback )
screen.mainloop()

##  eof  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~