从函数中获取变量

时间:2017-06-23 04:24:01

标签: python function tkinter tkinter-canvas

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

1 个答案:

答案 0 :(得分:1)

一般来说,我建议不要使用全局变量,因为你对谁可以修改它们以及如何修改它们的控制较少。但在这种情况下,主循环会调用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实例时会发生什么。