在这段代码中,我想知道如何获取rect
变量并在我尝试的Delete
方法中使用它。它目前出现错误。
from tkinter import *
def createRect(event):
rect = w.create_rectangle(50, 25, 150, 75, fill="blue")
return rect
def Start(event):
print("Single Clicked")
createRect(event)
def Delete(event):
i = createRect(event)
print("Double Clicked")
w.delete(i.rect)
root = Tk()
w = Canvas(root, width=200, height=100)
w.pack()
frame = Button(root, text="delete/make")
frame.bind("<Double-1>", Delete)
frame.bind("<Button-1>", Start)
frame.pack()
root.mainloop()
答案 0 :(得分:1)
一般来说,我建议不要使用全局变量,因为你对谁可以修改它们以及如何修改它们的控制较少。但在这种情况下,主循环会调用Start
和Delete
函数。您可以创建容器对象并在方法中使用它。
class MyRect:
def __init__(self):
self.rect = None
self.isSet = False
然后,在你的tkinter代码中,你可以像这样使用它:
myrect = MyRect()
def Start(event):
if not myrect.isSet:
print("Single Clicked")
myrect.rect = createRect(event)
myrect.isSet = True
def Delete(event):
if myrect.isSet:
print("Double Clicked")
w.delete(myrect.rect)
myrect.rect = None
myrect.isSet = False
您还可以处理用户双击或单击按钮1次以上的方式。
如果您喜欢冒险,可以添加__setattr__
和__getattr__
方法来控制在您不应该修改rect实例时会发生什么。