0

我正在尝试实现系统,当用户指向一个对象时,会出现一个文本框,其中包含我尚未实现的某些信息,然后当他们将鼠标移开时消失。我试图通过绑定 < Enter > 和 < Leave > 命令来做到这一点,但是当我运行以下代码时没有任何反应,除了在终端中它说 destroy 需要两个参数,所以我知道它正在调用函数.

from tkinter import *

xhig, yhig = 425,325
bkgnclr = '#070707'
currentmouseoverevent = ''

c = Canvas(master, width=xhig*2, height=yhig*2, bg=bkgnclr, cursor = 'crosshair',)

def mouseovertext(event):
    mouseover = "Jack"
    currentmouseoverevent = event
    c.create_rectangle(bbox=(event.x,event.y, (event.x + 5), (event.y +len(mouseover)*5)),outline="white", fill=bkgnclr, width= len(mouseover))
    c.create_text(position=(event.x,event.y),text=mouseover, fill="white", currentmouseoverevent=event)

def closemouseover(x):
    c.destroy(currentmouseoverevent)

c.bind("<Enter>", mouseovertext)
c.bind("<Leave>", closemouseover)

destroy 需要什么参数,为什么没有创建矩形?

4

2 回答 2

1

tkinter 中的边界框(bbox)是一个 4 元组,用于存储矩形的边界。您只传入鼠标位置,这是一个 2 元组。

此外,在您显示的代码中使用变量“currentmouseoverevent”之前,您从未真正分配给它,因此您的 closemouseover 函数将失败。

于 2013-10-22T18:51:45.390 回答
0

修正后的代码如下。

原来我叫 bbox 错了。我不应该将坐标作为元组传递,而应该将它们作为 create_rectangle 的前四个参数传递。c.destroy 仅适用于画布、条目或文本框等对象,而我使用 c.delete 删除项目,并使用 c.create_rectangle 和 c.create_text 返回的事件编号。

from tkinter import *

xhig, yhig = 425,325
bkgnclr = '#070707'
currentmouseoverevent = ['','']

c = Canvas(master, width=xhig*2, height=yhig*2, bg=bkgnclr, cursor = 'crosshair',)

def mouseovertext(event):
    mouseover = "Jack"

    if currentmouseoverevent[0] != '':
    closemouseover()
    currentmouseoverevent[0]=''
    return
currentmouseoverevent[0] = c.create_rectangle(event.x,event.y, (event.x + 5), (event.y +len(mouseover)*5),outline="white", fill=bkgnclr, width= len(mouseover))
 currentmouseoverevent[1] = c.create_text(event.x,event.y,text=mouseover, fill="white", currentmouseoverevent=event,anchor=NW)

def closemouseover(x):
    c.delete(currentmouseoverevent[0])
    c.delete(currentmouseoverevent[1])

c.bind("<Button-3", mouseovertext)
于 2013-10-25T02:58:56.173 回答