从函数中获取变量

Get a variable from a function

在这段代码中,我想知道如何获取 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()

一般来说,我建议不要使用全局变量,因为您对谁可以修改它们以及如何修改它们的控制较少。但是在这种情况下,主循环正在调用您的 StartDelete 函数。您可以创建一个容器对象并在您的方法中使用它。

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 实例时发生的情况。