tkinter:如何更改画布项目上的光标?

Phi*_*tte 4 python canvas tkinter items

我正在开发一个小型 python gui,只是为了娱乐和学习,并且我一直在尝试更改画布项目上的光标形状。

我知道当鼠标悬停在画布小部件上时,可以在画布创建时使用cursor=“whatever”选项来更改光标形状。但我只想对画布内的项目执行此操作。

这使得该项目正确:

self.image_obj = canvas.create_image(
        self.column_coordinate,
        self.row_coordinate,
        image=image
    )
Run Code Online (Sandbox Code Playgroud)

那是行不通的:

self.image_obj = canvas.create_image(
        self.column_coordinate,
        self.row_coordinate,
        image=image,
        cursor="hand1"
    )
Run Code Online (Sandbox Code Playgroud)

项目似乎不存在“光标”选项,有没有办法解决这个问题?

小智 5

花了一些时间弄清楚这一点。

下面的方法适用于使用带有 Enter 和 Leave 的 tag_bind() 方法的所有形状。

import tkinter as tk

main_window = tk.Tk()


def check_hand_enter():
    canvas.config(cursor="hand1")


def check_hand_leave():
    canvas.config(cursor="")


canvas = tk.Canvas(width=200, height=200)
tag_name = "polygon"

canvas.create_polygon((25, 25), (25, 100), (125, 100), (125, 25), outline='black', fill="", tag=tag_name)

canvas.tag_bind(tag_name, "<Enter>", lambda event: check_hand_enter())
canvas.tag_bind(tag_name, "<Leave>", lambda event: check_hand_leave())

canvas.pack()
main_window.mainloop()
Run Code Online (Sandbox Code Playgroud)