在Python中赋值之前引用的局部变量

时间:2015-01-17 01:56:08

标签: python user-interface tkinter

我做错了什么?

from Tkinter import *

coordY = 400

win = Tk()

def key(event):
    if str(event.char) == 'w':
        coordY = coordY - 5
        print coordY

def callback(event):
    canvas.focus_set()


canvas = Canvas(win, width=800, height=450)
canvas.bind("<Key>", key)
canvas.bind("<Button-1>", callback)
canvas.pack()

photo = PhotoImage(file="image.gif")

canvas.create_image(400, coordY, image=photo)

naveY = 400

win.mainloop()
  

UnboundLocalError:局部变量&#39; naveY&#39;在分配前引用

我希望当我按下&#39; w&#39;然后图像向上移动

2 个答案:

答案 0 :(得分:0)

不知道你的错误来自假设更多的代码,可能会有一些不同的地方。你是错误的,你来自一个类或函数?如果是这样,尝试将naveY设置为函数内的全局

global naveY

如果您的错误跟踪到函数或类之外是否在导致错误的行之前定义了naveY?如果这样移动你的

naveY = 400

相应地排队

答案 1 :(得分:0)

不确定naveY(从未在代码中的任何地方提及过)来自哪里,但是这里有一个可能导致异常的错误(使用不同的变量名称):

def key(event):
    if str(event.char) == 'w':
        coordY = coordY - 5
        print coordY
永远不会定义

coordY(Python知道它是一个局部变量,因为你在函数中分配了它),但你却试图从中减去5 - 什么?! - )

我怀疑这个函数缺少第一个语句global coordY,让Python知道它的不是一个局部变量 - 而且你报告的问题是神秘的{{ 1}}实际上是这个问题,你只是在你向我们展示的代码中进行了一些重命名,与你得到该异常的代码相比: - )