2017-10-25 7 views
1

最初はwとcは0になりますが、問題はたとえばスケールウィジェットでwの値を変更した後にcの値を変更してwの値が0に戻った場合です。いくつかの変数の値

どうすればこの問題を解決できますか?更新機能がcwの非更新された値を使用しているため

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() 
+0

問題は、 'updateScale()'には 'w'が割り当てられますが、' c'には割り当てられず、 'updateScale1()'には 'c'に割り当てられますが' w'には割り当てられません。 – quamrana

+0

どうすればこの問題を解決できますか? updateScaleとupdateScale1に引数を追加すると思いましたか?これはどう思いますか? –

+0

updateScaleとupdateScale1に2つの引数を入れようとしましたが、動作しません。:/ –

答えて

0

にです:

は、ここに私のコードです。おそらくこれを行うにはより良い方法がありますが、各更新関数の定義には、

global c, w 

を追加してみてください。

あなたの最も外側のスコープは、変数cwを持っていますが、彼らはあなたのouterscopeのどちらも子供だも明示的に渡された変数ですとしての機能の変数cwは完全に別の変数です。

関連する問題