【发布时间】:2017-04-03 04:04:59
【问题描述】:
当我注册一个多边形或只有一个组件的复合形状时,我可以使用该形状创建一个海龟光标,添加一个拖动事件处理程序,并将其拖动到屏幕上。
但是当我使用第二个组件注册复合形状时,我不能再拖动它:
from turtle import Turtle, Screen, Shape
def simple_polygon(turtle):
turtle.begin_poly()
turtle.circle(50)
turtle.end_poly()
screen.register_shape("simple_polygon", turtle.get_poly())
turtle.reset()
def compound_single(turtle):
shape = Shape("compound")
turtle.begin_poly()
turtle.circle(50)
turtle.end_poly()
shape.addcomponent(turtle.get_poly(), "blue", "blue") # component #1
screen.register_shape("compound_single", shape)
turtle.reset()
def compound_double(turtle):
shape = Shape("compound")
turtle.begin_poly()
turtle.circle(50)
turtle.end_poly()
shape.addcomponent(turtle.get_poly(), "green", "green") # component #1
turtle.penup()
turtle.left(90)
turtle.forward(25)
turtle.right(90)
turtle.pendown()
turtle.begin_poly()
turtle.circle(25)
turtle.end_poly()
shape.addcomponent(turtle.get_poly(), "yellow", "yellow") # component #2
screen.register_shape("compound_double", shape)
turtle.reset()
def drag_handler(turtle, x, y):
turtle.ondrag(None) # disable ondrag event inside drag_handler
turtle.goto(x, y)
turtle.ondrag(lambda x, y, turtle=turtle: drag_handler(turtle, x, y))
screen = Screen()
magic_marker = Turtle()
simple_polygon(magic_marker)
compound_single(magic_marker)
compound_double(magic_marker)
magic_marker.hideturtle()
red = Turtle(shape="simple_polygon")
red.color("red")
red.penup()
red.goto(150, 150)
red.ondrag(lambda x, y: drag_handler(red, x, y))
blue = Turtle(shape="compound_single")
blue.penup()
blue.goto(-150, -150)
blue.ondrag(lambda x, y: drag_handler(blue, x, y))
mostly_green = Turtle(shape="compound_double")
mostly_green.penup()
mostly_green.goto(150, -150)
mostly_green.ondrag(lambda x, y: drag_handler(mostly_green, x, y))
screen.mainloop()
您会发现生成的三个形状中只有两个可以拖动。注释掉这一行:
shape.addcomponent(turtle.get_poly(), "yellow", "yellow") # component #2
第三个圆圈将全是绿色并且可以拖动。
我在海龟文档中找不到关于具有多个组件的复合形状在拖动时不是有效光标的任何提及。第二个组件完全在第一个组件之内、重叠还是在第一个组件之外都没有任何区别。
查看海龟代码,我看不出有什么区别,这让我相信这个问题出在 tkinter 基础中,并且没有在海龟中正确记录。这个问题是 Unix 还是 OSX 特有的?
我错过了什么吗?为什么我不能拖动由多个组件构建的光标?
【问题讨论】: