修改同一类的另一个实例 Python-Tkinter 时更改值的实例变量



Point类有一个实例变量point,它保留多边形每个唯一角的选项卡。问题是,当我将光标悬停在类的第二个实例上时,第一个实例的point变量会发生变化。我的代码,

from tkinter import *
from tkinter import Tk,Canvas
import sys,os,string,time
class Point():
def __init__(self,root,canvas,pt,radius = 4):
self.canvas = canvas
self.root = root
self.point = self.canvas.create_oval(pt[0]-radius,pt[1]-radius,pt[0]+radius,pt[1]+radius,fill = "green", tag = "Point")
self.canvas.tag_bind("Point","<Enter>",self.enter)
self.canvas.tag_bind("Point","<Leave>",self.leave)
def enter(self,event):
print(self.point)
self.canvas.itemconfigure(CURRENT,fill="blue")
self.loc = 1
def leave(self,event):
self.canvas.itemconfigure(CURRENT,fill="green")
root = Tk()
root.title("Poly Draw")
canvas = Canvas(root,width = 256, height = 256, borderwidth = 1)
pt = [100,100]
point = Point(root,canvas,pt)
point2 = Point(root,canvas,[150,150])
print(point.point)
print(point2.point)
canvas.pack()
root.mainloop()

当您运行上述代码段时,当我将鼠标悬停在第二个实例上时,您将看到第一个实例的实例变量self.point正在更改(当光标进入小部件时,我正在打印self.point(。请注意,在我运行mainloop()之前,实例变量是正确的。

您按顺序绑定标签"点",因此只有最后一个处于活动状态。

我认为您想绑定到项目 ID,而不是(非唯一(标签。

如果是这样,请将绑定更改为:

def __init__(self,root,canvas,pt,radius = 4):
self.canvas = canvas
self.root = root
self.point = self.canvas.create_oval(pt[0]-radius,pt[1]-radius,pt[0]+radius,pt[1]+radius,fill = "green", tag = "Point")
self.canvas.tag_bind(self.point,"<Enter>",self.enter)
self.canvas.tag_bind(self.point,"<Leave>",self.leave)

最新更新