You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tkinter的Label(含图片)上方绘制点?需保留Label

解决Tkinter中Label图片上方绘制点被遮挡的问题

你当前的问题核心是Label组件层级高于Canvas,导致Canvas上的绘制内容被遮挡,且无法直接在Label上绘图。解决方案是在Label上方叠加一个视觉透明的Canvas,用来承载绘制的点,同时保留原Label的交互和显示功能。

修改后的代码

import tkinter as tk
from PIL import Image
from PIL import ImageTk


class interface:

    def __init__(self, root):
        self.root = root
        self.panelA = None
        self.f1 = tk.Frame(self.root)
        self.f1.grid()
        # 保留原底层Canvas结构
        self.canvas2 = tk.Canvas(self.f1, height=610, width=1050)
        self.canvas2.grid(row=0, column=0)
        # 新增顶层Canvas用于绘制点,设置为视觉透明
        self.draw_canvas = tk.Canvas(self.f1, height=610, width=1050, 
                                     highlightthickness=0, bg=self.f1['bg'])
        self.draw_canvas.grid(row=0, column=0)

    def select_image(self):
        image = Image.open("Graf/Ag8.png")
        resize_image = image.resize((1050, 610))
        image = ImageTk.PhotoImage(resize_image)
        self.panelA = tk.Label(self.f1, image=image)
        self.panelA.bind("<Button-1>", self.callback)
        self.panelA.image = image
        # 将Label置于底层Canvas和顶层绘制Canvas之间
        self.panelA.grid(row=0, column=0)

    def callback(self, event):
        # 在顶层Canvas上绘制红色圆点(半径3)
        self.draw_canvas.create_oval(event.x-3, event.y-3, event.x+3, event.y+3, 
                                     fill="red", outline="red")
        print(event.x, event.y)


def main():
    root = tk.Tk()
    obj_interface = interface(root)
    obj_interface.select_image()
    root.mainloop()


if __name__ == '__main__':
    main()

关键说明

  1. 层级关系:顶层draw_canvas的层级高于Label,所以绘制的点会显示在图片上方;Label又高于底层canvas2,保证图片正常显示。
  2. 透明效果:通过highlightthickness=0去掉Canvas边框,bg=self.f1['bg']让Canvas背景与父容器一致,实现视觉上的透明。如果需要跨平台完全透明,可针对系统调整:
    • macOS:设置bg='systemTransparent'
    • Windows:添加self.draw_canvas.config(transparentcolor=self.f1['bg'])
  3. 坐标一致性:顶层Canvas与Label尺寸、位置完全重合,点击Label获取的坐标可直接用于Canvas绘制,确保点的位置准确。

内容的提问来源于stack exchange,提问作者Sigel Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:45:29