在tkin中创建鼠标悬停文本框

2024-09-27 21:33:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图实现一个系统,当用户指向一个对象时,一个文本框会出现,其中包含一些我还没有实现的信息,然后当他们移开鼠标时就会消失。我正试图通过绑定<;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使用什么参数,为什么不创建矩形?在


Tags: ltgtevent参数defwidthenterleave
2条回答

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

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

更正后的代码如下。在

结果我打错电话给bbox了。与其将坐标作为元组传递,不如将它们作为create_rectangle的前四个数组传递。c、 destroy只用于canvas、entry或textbox之类的对象,而我使用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)

相关问题 更多 >

    热门问题