可以蟒蛇龟样本背景颜色?

时间:2015-12-18 15:34:38

标签: python tkinter turtle-graphics lego

我想用python的海龟来有效地模拟乐高机器人。乐高机器人能够对机器人定位的颜色进行采样。考虑到这一点,我想创建一个背景迷宫,并让机器人通过迷宫找到它的方式。我希望与10年级的编程学生一起使用。

到目前为止,我可以使用tkinter创建一个简单的画布,并在该画布上使用彩色矩形。我可以将乌龟放在画布上并让它们共存。乌龟可以放在彩色矩形上。

现在我只需要能够以某种方式对颜色进行采样。这可以通过获取乌龟的位置然后对该坐标进行采样来完成。但我现在陷入困境。

到目前为止,这是我的代码:

from tkinter import Tk, Canvas, Frame, BOTH
import turtle

top = Tk()
C = Canvas(top, height=500, width=600)

Doug = turtle.RawTurtle(C)

rectangle = C.create_rectangle(30, 10, 120, 80, outline="#fb0", fill="#fb0")

Doug.fd(50)
Doug.rt(90)
Doug.fd(50)

C.pack(fill=BOTH, expand=1)
top.mainloop()

我确实注意到,当我运行代码时,海龟的踪迹是'在矩形后面,表明存在分层问题。

2 个答案:

答案 0 :(得分:0)

根据文档中关于乌龟的说法,它没有任何功能来获取当前位置的颜色。我的方法是使用二进制映射作为步行指示器,但这可能太静态,无法模拟乐高机器人环境。

如果您在Windows上,则可以使用win32gui库,它将为您提供屏幕上像素的像素颜色(Is it possible to get the color of a particular pixel on the screen with it's X and Y coordinates?)。将其与turtle.hideturtle()turtle.pos()结合使用,并为父窗口添加一些偏移量,您可能会获得所需的功能。 如果这对您有用,我建议您创建自己的模块,提供此功能,以便学生可以专注于解决迷宫而不是Windows apis。

答案 1 :(得分:0)

您可以向Canvas询问Turtle下面的物品,并报告您感兴趣的任何填充颜色。例如,您可以将要为迷宫绘制的所有矩形添加到矩形列表中,并且使用该列表来确定乌龟是否在矩形中。然后报告颜色。

from tkinter import Tk, Canvas, Frame, BOTH
import turtle

top = Tk()
C = Canvas(top, height=500, width=600)

Doug = turtle.RawTurtle(C)

rectangles = []
rectangles.append(C.create_rectangle(30, 10, 120, 80, outline="#fb0", fill="#fb0"))

Doug.fd(50)
Doug.rt(90)
Doug.fd(50)

# For some reason Doug's y-coord is opposite what Canvas uses, so * -1 to fix it... 
overlapping = C.find_overlapping(Doug.xcor(), Doug.ycor() * -1, Doug.xcor(), Doug.ycor() * -1)
for item_id in overlapping:
   if item_id in rectangles:
        print(C.itemcget(item_id, "fill"))

C.pack(fill=BOTH, expand=1)
top.mainloop()

最后的想法,但与问题无关。我强烈建议您使用小写名称来实例化对象(将“C”更改为“canvas”,将“Doug”更改为“doug”)。在python和许多其他语言中,大写表示Class本身,而不是它的实例)。我在上面的代码中单独留下了它,因此您可以尝试对代码进行最少的更改。