[英]How to make tkinter canvas text variable in function
我正在尝试将不同的字符串传递给使用循环功能在网格内创建的画布文本。 文本绑定到事件处理程序,并且打印文件证明在触发事件时它应该能够更改,但是我还没有弄清楚该怎么做。
考虑以下代码:
from Tkinter import *
def create_grid():
rows=2
cols=2
canvasID = 0
for r in range(rows):
c=0
for col in range(cols):
cv=Canvas(bg='white',width=200,height=150)
cv.grid(row=r,column=c)
imageFile=PhotoImage(width=200,height=150)
imageFile.put('black',to=(0,0,197,147))
cv.image=imageFile
cv.create_image(200/2,150/2,anchor=CENTER,image=imageFile)
txt=cv.create_text(200/2,150/2,fill='white',anchor=CENTER,font=("Arial",18,'bold'),text=var.get())
def enter_lambda(canvasID):
return lambda event:on_enter(event,canvasID)
def leave_lambda(canvasID):
return lambda event:on_leave(event,canvasID)
cv.bind("<Enter>", enter_lambda(canvasID))
cv.bind("<Leave>", leave_lambda(canvasID))
canvasID+=1
c+=1
r+=1
def on_enter(event,canvasID,*args):
var="in"
print var,str(canvasID)
def on_leave(event,canvasID,*args):
var="out"
print var,str(canvasID)
root=Tk()
app=Frame(root)
var=StringVar()
var.set("out")
create_grid()
root.mainloop()
在如何在画布文本中添加Tkinter文本变量中可以找到类似的问题,尽管使用此方法无效,我也不知道为什么。
我认为您想要的是,当鼠标位于正方形内时,正方形中的单词为“ IN”,而当鼠标位于正方形外时为“ OUT”。
如果是这样的话,有很多方法可以做到这一点。 最简单的方法是将文本项的ID传递给回调,然后使用itemconfigure
更改值。 您无需使用StrngVar
即可完成此工作。
例如:
txt=cv.create_text(..., text="OUT")
...
def enter_lambda(canvasID, textID):
return lambda event:on_enter(event,canvasID, textID)
def leave_lambda(canvasID, textID):
return lambda event:on_leave(event,canvasID, textID)
...
cv.bind("<Enter>", enter_lambda(canvasID, txt))
cv.bind("<Leave>", leave_lambda(canvasID, txt))
...
def on_enter(event,canvasID, txt):
cv = event.widget
cv.itemconfigure(txt, text="IN %s" % canvasID)
def on_leave(event,canvasID, txt):
cv = event.widget
cv.itemconfigure(txt, text="OUT %s" % canvasID)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.