将变量分配给tkinter矩形的问题

时间:2019-06-17 06:57:39

标签: python class tkinter tkinter-canvas

最近我第一次尝试使用类和__init__时就陷入了困境,这对我来说是很新的。

我写了一个叫做box的类,它有一个__init__,其中包含坐标和状态,即True或False。

因为我不知道更好,所以我将每个Box(x, y, state)调用都用f'分配给了一个自动变量。然后,我调用了Box.create()方法,该方法是在类中使用相同的f'变量定义的。

现在的问题是,当变量Box1and1已经存在时,我希望它调用状态为False的Box(x, y, state)来更改框。

但是我无法检查变量是否已经存在,因为我无法轻松访问自动变量。当我尝试使用try-except进行操作时,我意识到f'变量只是变成了一个没有f'=10的字符串。如果我要说f'=10,我将创建一个新的变量,而不是计划。
那么如何检测位置1, 1处的框是否已经绘制?也许比自动变量更好,或者使用tryexcept或if语句回答如何访问自动变量的答案。

代码如下:

class Box:
    def __init__(self, x, y, state):
        self.x = x
        self.y = y
        self.state = state

    def create(self):

        if self.state:
            c.create_rectangle(self.x * 100, self.y * 100, self.x * 100 + 100, self.y * 100 + 100, fill="yellow")
            print(str(self.state) + "Yellow")
        elif not self.state:
            c.create_rectangle(self.x * 100, self.y * 100, self.x * 100 + 100, self.y * 100 + 100, fill="red")
            print(str(self.state) + "red")

def amenak(x,y):
    f'box{str(x) + "und" + str(y)}'

def getcords(self):
    cords = e.get()
    cords = cords.replace(",", "")
    cords = tuple(cords)
    x, y = cords
    x = int(x)
    y = int(y)

    try:
        amenak(x,y)
    except NameError:
        #print(f'box{str(x)+"und"+str(y)}'+"test1")
        exec(f'box{str(str(x) + "und" + str(y))}= Box(x,y, True)')
        exec(f'box{str(x) + "und" + str(y)}.create()')
    else:
        exec(f'box{str(x)+"und"+str(y)}= Box(x,y, False)')
        exec(f'box{str(x) + "und" + str(y)}.create()')

0 个答案:

没有答案