我有一個透明背景的影像(用Pillow繪制)。我可以通過create_image()將其添加到Tkinter畫布上,并為其系結滑鼠事件,例如按鈕點擊。
然而,Tkinter 畫布觸發了整個影像的滑鼠事件,包括透明背景。
在Tkinter中是否有辦法讓滑鼠事件忽略影像的透明像素?
其他的東西都能正常作業,但是我沒能找到任何選項,或者說是否有可能讓Tkinter忽略影像中的透明度的滑鼠事件?
預先感謝任何知道的人!
編輯2:應要求,提供更多細節。情況是,我有一張作為畫布物件背景的地圖,我在這張地圖上畫了路線,我希望這些路線能對滑鼠事件(如點擊)做出反應。
for route in travel_routes:
route_map = route.draw_route_map(canvas_width, canvas_height)
self.CanvasTravelMapRoutes.append(ImageTk.PhotoImage(route_map))
self.CanvasTravelMap.create_image(
0, 0, image = self.CanvasTravelMapRoutes[-1], anchor = tk.NW, tag = ( route.RouteID, 'travel_route') )
self.CanvasTravelMap.tag_bind('travel_route'/span>, "<Button-1>", self.travel_canvas_route_click)
在路線類中,draw_route_map方法的作業原理如下:
route_map = Image. new("RGBA", (canvas_width, canvas_height), (0, 0, 0))
draw = ImageDraw.Draw(route_map)
draw.line()
draw.ellipse()
等等,等等。
結果是一個鋪設在畫布上的路線地圖影像,但除了為標記路線在地圖上的路線而繪制的線條和圓圈外,它大部分是透明的。
這段代碼的所有元素都按照設計的方式運行,除了畫布上的滑鼠事件也回應了路線圖影像的透明部分。顯然,這意味著在畫布上任何地方的點擊都會選擇頂部的路線圖,而不是被點擊的具體線路/標記。
uj5u.com熱心網友回復:
因此,如果你想有這種碰撞,你可以嘗試這樣做:
如果你想有這種碰撞,你可以嘗試這樣做。
from tkinter import Tk, Canvas
from PIL import Image, ImageTk
import requests
url = 'http://media-s3-us-east-1.ceros.com/g3-communications/images/2019/01/15/05eea4b9b9ce010d2dd6b0c063d2f5ca/p1-blob.png?imageOpt=1&fit=bounds&width=893'。
data = requests.get(url, stream=True).raw
image = Image.open(data)
def on_opaque(event, offset, img)。
print('clicked on bounding box')
x, y = event.x - offset[0], event.y - offset[1]
if img.getpixel((x, y)) !=0:
print('clicked on opaque pixel' )
root = Tk()
photo = ImageTk.PhotoImage(image)
canvas = Canvas(root, height=image.height, width=image.width, highlightthickness=0)
canvas.pack(fill='both', expand=True)
offset_x, offset_y =0, 0
c_img = canvas.create_image(offset_x, offset_y, image=photo, anchor='nw')
canvas.tag_bind(c_img, '<Button-1>', lambda e: on_opaque(e, ( offset_x, offset_y), image)
root.mainloop()
我使用了互聯網上的圖片,你可以使用你自己的,只是你可以立即測驗。基本上,它將整個影像與按鈕點擊系結在一起,但在回呼中它會額外檢查點擊是否在沒有透明背景的位置,也要小心假的透明背景,我建議你將畫布的背景設定為黑色,看看影像后面的背景是否也是黑色的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/319459.html
標籤:
