我正在开发一个小的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
)
项目似乎不存在“光标”选项,是否有解决此问题的方法?
答案 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()