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

时间:2019-02-09 10:40:20

标签: python canvas tkinter items

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

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

这使得物品正确:

Chart4.Chart = new BarChart() { Entries = entries, Margin = 20 };

那行不通:

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

项目似乎不存在“光标”选项,是否有解决此问题的方法?

2 个答案:

答案 0 :(得分:1)

更改光标的唯一方法是更改​​其在画布上的显示方式。通过每次检查鼠标移动是否位于要更改的项目的边界框内,就可以实现此效果。

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

答案 1 :(得分:0)

花费一些时间来解决这个问题。

下面的方法适用于使用带有回车和离开的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()