2016-07-25 21 views
-3

Meine globalen Variablen funktionieren nicht in meinem Code. Ich bin neu und das scheint mir nicht klar zu sein: Ich habe Variablen gesetzt (nur mit gna), die durch ein Eingabefeld, ausgelöst durch eine entsprechende Schaltfläche, manipuliert werden können. Aus irgendeinem Grund nimmt es nicht die Änderungen innerhalb der Schleife. Ich versuche, es zu machen, wo die geänderte Variable kann auch grafisch dargestellt werden, aber es gibt mir die folgende Fehlermeldung:Globale Variablen funktionieren nicht

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') 

Hier ist der Code:

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

Ihr Code ist nicht sehr pythonic - Sie verwenden unnötige '()' –

+4

Globale Variablen sind eher ein letzter Ausweg Art der Sache –

+0

@ uoɥʇʎPʎzɐɹC Ich sehe keine. Das ist die geringste ihrer Sorgen, obwohl –

Antwort

2
gna = gnaEntry.get() 

Entry.get kehrt eine Zeichenkette, die wahrscheinlich ein ungeeigneter Typ für die Arithmetik ist, die Sie in tun. Versuchen Sie zuerst, eine Nummer zu konvertieren.

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

Vielen Dank, dass Sie es gelöst haben! –

+0

@EvelinRamos Wenn dies Ihr Problem löst, sollten Sie die Antwort mit dem Häkchen auf der linken Seite als akzeptiert markieren –