簡體   English   中英

在Tkinter中的文本框上創建鼠標

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM