Как инвертировать цвета в холсте tkinter? - PullRequest
0 голосов
/ 14 мая 2018

Мне любопытно, если есть способ, как инвертировать цвета холста напрямую в нем.Я видел модуль PIL, который позволяет работать с изображением (как файл), но я хочу применить изменения, все еще видимые внутри холста, который содержит фигуры.Например:

import tkinter
canvas=tkinter.Canvas()
canvas.pack()
canvas.create_rectangle(20,20,60,60,fill='blue', outline='red')

Можете ли вы помочь мне, что делать, чтобы инвертировать цвета?

1 Ответ

0 голосов
/ 14 мая 2018

Интересная проблема. Я могу изменять цвета элементов холста только по одному, но я могу написать функцию, которая выполняет все или часть холста. Пример:

import tkinter

root = tkinter.Tk()
root.geometry('300x200')
canvas = tkinter.Canvas()
canvas.pack(expand='yes', fill='both')
canvas.create_rectangle(20,20,60,60,fill='blue', outline='red')
canvas.create_line(100,100,160,160,fill='blue')

def invert_color(color):    # Invert color
    if type(color) == str: rgb = canvas.winfo_rgb(color)
    else: rgb = color
    rgb = (65535-rgb[0], 65535-rgb[1], 65535-rgb[2])
    tk_rgb = "#%04x%04x%04x" % (rgb)
    return tk_rgb

def invert_canvas(event):
    # Check or select canvas items:
    items = canvas.find_withtag('all')
    # Loop through canvas items
    for item in items:
        fill = canvas.itemcget(item, "fill")        # Get fill color
        if fill != '': fill = invert_color(fill)
        if canvas.type(item) in ['rectangle','arc']:
            outline = canvas.itemcget(item, "outline")  # Get outline color
            outline = invert_color(outline)
            canvas.itemconfig(item, fill=fill, outline=outline) # Set colors
        else:
            canvas.itemconfig(item, fill=fill) # Set colors

root.bind('<space>', invert_canvas)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...