我正在学习Python的TKinter模块,它有一个简单的文本框,要求输入速度和时间并打印距离。因为某些原因,我的距离总是,不管速度是多少,都是我输入的时间的乘以。我想我要么需要第二个条目,要么把变量全球化,但我想知道你是什么
from Tkinter import *
master = Tk()
speed = 10; time = 10; d = 50
e = Entry(master)
e.pack()
e. delete(0, END)
e.insert(0, "Enter Speed")
def callspeed():
s = e.get()
speed = int(s)
e.delete(0, END)
e.insert(0, "Enter time")
def calltime():
t = e.get()
time = int(t)
d = speed * time
print d
bs = Button(master, text="Speed", width=15, command=callspeed)
bs.pack()
bt = Button(master, text="Time", width=15, command=calltime)
bt.pack()
mainloop()
阿巴纳特是对的,全局变量很混乱。以下是我用速度和时间作为局部变量的重写:
问题是
callspeed
中的这一行:创建名为
speed
的新局部变量,而不是更新全局变量。在要修复它,只需要一个^{} 声明:
^{pr2}$确切的规则有点复杂(“自由变量”(free variables)——这基本上意味着您引用但从未赋值的变量既可以来自闭包,也可以来自全局;指定给的变量总是局部的),但安全的做法是,当您想使用全局变量时,总是添加一个
global
语句。在或者,更安全的是,首先不要使用全局变量。在
例如,您可以将所有这些代码,或者只是其中的“model”部分移到一个类中,并使
speed
成为一个实例变量。在(这不是一个真正的MVC设计,因为“控制器”部分分散在各处,“视图”没有组织成任何类型的结构,但它应该足以显示基本思想。)
相关问题 更多 >
编程相关推荐