Python 某些变量的值
开始时,w和c等于0,但问题是当我改变w的值时,比如用scale小部件,然后我改变c的值,w的值回到0 我怎样才能解决这个问题 这是我的密码:Python 某些变量的值,python,python-2.7,python-3.x,tkinter,Python,Python 2.7,Python 3.x,Tkinter,开始时,w和c等于0,但问题是当我改变w的值时,比如用scale小部件,然后我改变c的值,w的值回到0 我怎样才能解决这个问题 这是我的密码: import Tkinter as tk from matplotlib.figure import Figure from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg import numpy as np app = tk.Tk() app.wm_title("Tools")
import Tkinter as tk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
app = tk.Tk()
app.wm_title("Tools")
def updateScale(value):
ax.clear()
print "scale is now %s" % (value)
ax.plot(m, np.exp(m))
a = np.array([1, 2, 3])
w = float(value)
b = w*a+c
ax.plot(a,b)
graph.show()
return w
def updateScale1(value1):
ax.clear()
print "scale is now %s" % (value1)
ax.plot(m, np.exp(m))
a = np.array([1, 2, 3])
c = float(value1)
b = w*a+c
ax.plot(a,b)
graph.show()
return c
fig = Figure(figsize=(6, 4), dpi=96)
ax = fig.add_subplot(111)
#bx = fig.add_subplot(111)
m = np.array([1,2,3])
ax.plot(m,np.exp(m))
a = np.array([1, 2, 3])
c = 0
w = 0
b = w * a + c
ax.plot(a,b)
graph = FigureCanvasTkAgg(fig, master=app)
canvas = graph.get_tk_widget()
canvas.grid(row=0, column=0, rowspan = 11, padx =10, pady =5)
value = tk.DoubleVar()
scale = tk.Scale(app, variable=value, orient="horizontal",length = 100, from_=0.55, to=2.75, resolution = 0.01,command=updateScale)
scale.grid(row=0, column=1)
value1 = tk.DoubleVar()
scale1 = tk.Scale(app, variable=value1, orient="horizontal", command=updateScale1)
scale1.grid(row=1, column=1)
app.mainloop()
这是因为更新函数使用未更新的
c
和w
值。可能有更好的方法,但请尝试添加:
global c, w
在每个更新函数定义中
最外层的作用域有变量
c
和w
,但函数中的变量c
和w
是完全不同的变量,因为它们既不是外层作用域的子变量,也不是显式传递给它们的变量。这是因为更新函数使用c
和w
。可能有更好的方法,但请尝试添加:
global c, w
在每个更新函数定义中
最外层的作用域包含变量
c
和w
,但函数中的变量c
和w
是完全不同的变量,因为它们既不是外层作用域的子变量,也不是显式传递给它们的变量。问题在于updateScale()
您分配给w
,但不分配给c
,在updateScale1()
中,您分配给c
,但不分配给w
。我如何解决这个问题?我想给updateScale和updateScale1添加一个参数?你怎么看?我试着在updateScale和updateScale1中加入2个参数,但不起作用…:/问题是在updateScale()
中,您分配给w
,而不是c
;在updateScale1()
中,您分配给c
而不是w
。我如何解决这个问题?我想给updateScale和updateScale1添加一个参数?你怎么看?我试着在updateScale和updateScale1中加入2个参数,但不起作用…:/