2

我正在做一个简单的游戏作为学校作业,但我在更新画布时遇到了问题。我尝试了一些循环和睡眠命令,但它们似乎不起作用。现在我有代码应该刷新画布,但我不知道如何将画布传递给我的 updateCanvas 函数。

基本上我有两个功能:

def canvas(self):
    canvas = Canvas(self)
    button = Button(self, text="test", command=self.updateCanvas)
    button.place(x=240, y=5)

然后我有一个更新画布的方法

def updateCanvas(self):
    canvas.create_oval(ovalx, ovaly, ovalx2, ovaly2, fill="black")

按下按钮应该更新画布,但它说画布不是全局的。这就说得通了。我以前做过java编程。出于某种原因将画布更改为:

def canvas(self):
    global canvas = Canvas(self)

这给了我一个“语法错误:无效语法”

我该怎么办?使用循环?我不能在类内创建一个全局变量吗?将游戏视为跳棋或国际象棋,当跳棋或棋子移动时,我需要更新屏幕。

4

1 回答 1

3

第一的:

global canvas = Canvas(self)

这给你 a 的原因SyntaxError是它不是有效的 Python。

global语句仅采用一个或多个名称。如果要为名称分配任何内容,则需要单独的赋值语句:

global canvas
canvas = Canvas(self)

(如果你想知道为什么 Python 是这样设计的,这并不难解释……但如果你只想知道如何使用 Python,而不是如何设计自己的语言,那么这里不相关。)

但是,您可能不想在这里首先使用全局变量。类的全部意义在于它们的实例可以具有属性,这些属性将某事物的相关状态联系在一起。你几乎肯定想要这个:

self.canvas = Canvas(self)

然后在其他地方,在您的其他方法中,您执行以下操作:

self.canvas.create_oval(ovalx, ovaly, ovalx2, ovaly2, fill="black")

您可能会感到困惑,因为在 Java 中,您在类上声明实例成员,然后canvas神奇地意味着与this.canvas. Python 不是这样工作的。变量不在任何地方声明,它们只是动态创建的,并且实例变量(和方法)总是需要显式的self..

于 2014-09-30T21:27:11.780 回答