首页 > 解决方案 > tkinter:如何在画布项目上更改光标?

问题描述

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

我知道在画布创建时使用 cursor="whatever" 选项可以在将鼠标悬停在画布小部件上时更改光标形状。但我只想对这个画布内的项目这样做。

这使得项目正确:

self.image_obj = canvas.create_image(
        self.column_coordinate,
        self.row_coordinate,
        image=image
    )

这不起作用:

self.image_obj = canvas.create_image(
        self.column_coordinate,
        self.row_coordinate,
        image=image,
        cursor="hand1"
    )

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

标签: pythoncanvastkinteritems

解决方案


更改光标的唯一方法是更改​​它在画布上的呈现方式。通过每次鼠标移动时检查它是否在你希望它切换的项目的边界框内,你可以达到这个效果。

from tkinter import *

canvas = Canvas(width=200,height=200)
canvas.pack()

rec = canvas.create_rectangle(100,0,200,200,fill="red")#example object

def check_hand(e):#runs on mouse motion
    bbox= canvas.bbox(rec)
    if bbox[0] < e.x and bbox[2] > e.x and bbox[1] < e.y and bbox[3] > e.y:#checks whether the mouse is inside the boundrys
        canvas.config(cursor="hand1")
    else:
        canvas.config(cursor="")

canvas.bind("<Motion>",check_hand)#binding to motion

推荐阅读