2016-07-25 65 views
-3

我的全局變量在我的代碼中不起作用。我對此很新,我似乎無法弄清楚這一點:我設置了變量(只顯示gna),可以通過輸入字段操作,由相應的按鈕觸發。出於某種原因,它沒有在循環內進行更改。我試圖使它的地方改變的變量可以被繪製爲好,但它給了我下面的錯誤:全局變量不起作用

Exception in Tkinter callback Traceback (most recent call last): 
File "C:\Program Files\Python35\lib\tkinter\__init__.py", line 1549, in __call__ 
    return self.func(*args) File "G:/PYTHON/Eulers.py", line 64, in graph 
    v[i + 1] = 1/c * (gna * f[i] - gk * u[i]) * del_t + v[i] 
TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('< U32') dtype('< U32') dtype('< U32') 

下面是代碼:

gna = 0.9 

gnalabel = Label(topFrame, text="gna = %s" % gna) 
gnalabel.pack() 

gnaEntry = Entry(topFrame, justify=CENTER) 
gnaEntry.pack() 

def gnacallback(): 
    global gna 
    gna = gnaEntry.get() 
    gnalabel.config(text="C = %s" % gna) 

gnaButton = Button(topFrame, text="Change", width=10, command=gnacallback) 
gnaButton.pack() 

def graph(): 
    global c, gna, gk, beta, gamma 

    for i in range(0, len(t)-1): 

     stinum = np.floor(i/3000) 
     stimt = 3000 + 3000 * (stinum - 1) 

     f[i] = v[i] * (1 - (((v[i]) ** 2)/3)) 
     v[i + 1] = 1/c * (gna * f[i] - gk * u[i]) * del_t + v[i] 

     if(i == stimt): 
      v[i + 1] = v[i + 1] + v_stim 

     u[i + 1] = (v[i] + beta - gamma * u[i]) * del_t + u[i] 

    plt.plot(v) 
    plt.show() 
+0

你的代碼是不是很Python的 - 你使用不必要的'()' –

+4

全局變量更多的是一種不得已之類的話 –

+0

@uoɥʇʎPʎzɐɹC我看不出有任何的。這是他們最擔心的問題,儘管 –

回答

2
gna = gnaEntry.get() 

Entry.get回報一個字符串,這可能是您在中進行的算術不適合的類型。嘗試先轉換爲數字。

gna = float(gnaEntry.get()) #or perhaps `int` if it's always an integer 
+0

非常感謝您的解決! –

+0

@EvelinRamos如果這解決了您的問題,您應該將答案標記爲已接受,並使用左側的複選標記 –