Получить цвет координаты фигуры, нарисованной с помощью графики Python Zelle - PullRequest
0 голосов
/ 13 мая 2018

В python, как я могу получить цвет определенной координаты любой фигуры, которую я нарисовал с помощью графического модуля Zelle?

Я использую Python с графическим модулем Zelle для обработки моих кругов и линий. Я пытаюсь получить цвет определенной координаты (или пикселя?) На холсте, на котором рисую. Какой метод или другие модули мне нужно использовать для достижения этой цели?

Я думал, что метод 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()

1 Ответ

0 голосов
/ 12 октября 2018

Это можно сделать некоторым способом.Zelle graphics.py построен поверх библиотеки tkinter в Python, которая может как определить, какой графический объект находится выше заданной точки, так и опросить цвет этого объекта.Ключ знает, что экземпляр 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, вам нужно настроить.

...