Задать вопрос
@AlexNemets

Как изменить родительский альфа-канал в canvas Tkinter python?

Мне нужно, чтобы на прозрачном фоне по нажатию клавиши на координатах курсора выводилось изображение.
Прозрачность получилось регулировать при помощи изменения альфа канала, но изображение, которое выводит canvas наследует корневой холст. Если root полностью прозрачно то изображения соответственно не видно. При полупрозрачном альфа канале - изображение такое же тусклое, как его вывести нормальным без наследования?
from tkinter import Canvas,Tk,Button,PhotoImage

root = Tk()
root.wm_attributes('-alpha', 0.5)  # прозрачность
root.wm_attributes("-topmost", True)  # поверх всех окон
img = PhotoImage(file=r"pics\image_19x19.png") 
canvas = Canvas(None, width=1920, height=1080, highlightthickness=0)
canvas.pack()

# отрисовка картинки в координатах курсора по ЛКМ
def leftclick(event):
    x = event.x
    y = event.y
    print(f'{x}, {y}')
    canvas.create_image(x,  y,  image=img)

root.bind('<Button-1>' , leftclick)
root.mainloop()


676cfe4031cef079483859.png
  • Вопрос задан
  • 53 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@eminsk
программирую на python
from tkinter import Canvas,Tk,Button,PhotoImage, Toplevel

root = Tk()
root.wm_attributes('-alpha', 0.5)
root.wm_attributes("-topmost", True)
root.overrideredirect(True) 
img = PhotoImage(file=r"pics\image_19x19.png")
canvas = Canvas(root, width=1920, height=1080, highlightthickness=0)
canvas.pack()

image_window = Toplevel(root)
image_window.overrideredirect(True) 
image_window.wm_attributes("-topmost", True) 

image_canvas = Canvas(image_window, width=img.width(), height=img.height(), highlightthickness=0)
image_canvas.pack()

image_window.withdraw()

def leftclick(event):
    x = event.x_root
    y = event.y_root

    image_canvas.delete("all")
    image_canvas.create_image(img.width() // 2, img.height() // 2, image=img)

    image_window.geometry(f"+{x}+{y}")
    image_window.deiconify()

root.bind('<Button-1>' , leftclick)
root.mainloop()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы