1

在 python 中,如何获取使用 Zelle 图形模块绘制的任何图形的特定坐标的颜色?

我正在使用带有 Zelle 图形模块的 Python 来处理我的圆圈和线条。我试图在我正在绘制的画布上获得特定坐标(或像素?)的颜色。为了实现这一点,我必须使用什么方法或其他模块?

我认为该getPixel()方法会起作用,但它不起作用,因为它是用于图像处理,而不是用于绘制的图片。我当前的代码:

from math import *
from time import *
from graphics import *
def main():
    paper = GraphWin('shjaji20', 300, 300)
    paper.setBackground('white')
    road0 = Circle(Point(150, 150), 100)
    road1 = Line(Point(150, 50), Point(150, 0))
    road2 = Line(Point(50, 150), Point(0, 150))
    road3 = Line(Point(250, 150), Point(300, 150))
    road4 = Line(Point(150, 250), Point(150, 300))


    road0.draw(paper)
    road1.draw(paper)
    road2.draw(paper)
    road3.draw(paper)
    road4.draw(paper)

    car = Circle(Point(0, 150), 5)
    car.setFill('white')
    car.draw(paper)
    for i in range(1000):
        car.move(1, 0)
        time.sleep(.05)
        print car.getPixel(150, 0) ***#I tried many ways but don't work! Here's the problem***

main()
4

1 回答 1

1

这可以通过某种方式完成。Zelle 的 graphics.py 构建在 Python 的 tkinter 库之上,该库既可以识别哪个图形对象位于给定点上方,也可以询问该对象的颜色。关键是通过继承知道一个GraphWin实例也是一个 tkinter Canvas

from time import sleep
from graphics import *

paper = GraphWin(width=300, height=300)

road = Circle(Point(150, 150), 100)
road.setFill('pink')
road.draw(paper)

Line(Point(150, 50), Point(150, 0)).draw(paper)
Line(Point(50, 150), Point(0, 150)).draw(paper)
Line(Point(250, 150), Point(300, 150)).draw(paper)
Line(Point(150, 250), Point(150, 300)).draw(paper)

car = Circle(Point(0, 150), 5)
car.setFill('white')
car.draw(paper)

for _ in range(300):
    car.move(1, 0)

    center = car.getCenter()
    overlapping = paper.find_overlapping(center.x, center.y, center.x, center.y)
    if overlapping:
        print(paper.itemcget(overlapping[0], "fill"))

    sleep(0.05)

随着小圆圈越过线条,“黑色”将打印到控制台。当它穿过中心圆圈时,我们会打印出“粉红色”。该代码适用于 Python3,如果您使用的是 Python2,则需要进行调整。

于 2018-10-12T06:24:40.387 回答