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

问题描述 投票:0回答:2

我究竟做错了什么?

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:赋值前引用的局部变量'naveY'

我希望当我按'w'时图像会向上移动

python user-interface tkinter
2个回答
0
投票

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

global naveY

如果您的错误跟踪到函数或类的外部是在导致您错误的行之前定义的naveY?如果是这样的话

naveY = 400

相应地排队


0
投票

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

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

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

我怀疑这个函数缺少第一个语句global coordY让Python知道它不是一个局部变量 - 并且你报告的神秘naveY的问题实际上是这个问题,你只是在你正在显示的代码中做了一些重命名我们,与您获得该例外的代码相比:-)

© www.soinside.com 2019 - 2024. All rights reserved.