[英]Creating a mouse over text box in tkinter
我正在嘗試實現一個系統,當用戶指向一個對象時,將出現一個文本框,其中包含我尚未實現的某些信息,然后在他們將鼠標移開時消失。 我試圖通過綁定<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)
銷毀什么參數,為什么不創建矩形?
tkinter中的邊界框(bbox)是一個四元組,用於存儲矩形的邊界。 您只傳遞了鼠標的位置,該位置為2元組。
另外,在顯示的代碼中使用變量“ currentmouseoverevent”之前,您實際上從未分配過該變量,因此closemouseover函數將失敗。
更正后的代碼如下。
原來我在給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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.