我正在尝试将Kivy的GUI功能与我编写的Python函数结合起来。但是,每当我将函数调用到Screen
类之一上时,整个应用程序就会崩溃并消耗我的内存和CPU使用率。
基本上,我想做的是从涉及两个csv文件的比较global where
函数中获取fn_compare
变量。然后,我打算在其他三个函数中使用该变量。 fn_verifier
函数将使用该global where
变量来验证字母的26个字母中的任何一个与之匹配,然后它发出声音。
class Identifier:
def fn_compare(self):
count=1
while (count>0):
livecsv=np.genfromtxt("lettera.csv", delimiter=",", skip_header=1, filling_values=np.nan, dtype=int, case_sensitive=True, deletechars='', replace_space=' ')
refcsv=np.genfromtxt("refcsv1.csv", delimiter=",", skip_header=1, filling_values=np.nan, dtype=int, case_sensitive=True, deletechars='', replace_space=' ')
A=np.array(livecsv)
B=np.array(refcsv)
D=B - A[-1]
match= B[np.abs(D).sum(axis=1).argmin()]
global where
where=match[0]
time.sleep(1)
count = count + 1
def fn_verify(self):
global where
var=where
if var==1:
A=playsound('audio-alphabet/A.wav',True)
return A
elif var==2:
B=playsound('audio-alphabet/B.wav',True)
return B
elif var==3:
C=playsound('audio-alphabet/C.wav',True)
return C
elif var==4:
D=playsound('audio-alphabet/D.wav',True)
return D
elif var==5:
E=playsound('audio-alphabet/E.wav',True)
return E
elif var==6:
F=playsound('audio-alphabet/F.wav',True)
return F
elif var==7:
G=playsound('audio-alphabet/G.wav',True)
return G
elif var==8:
H=playsound('audio-alphabet/H.wav',True)
return H
elif var==9:
I=playsound('audio-alphabet/I.wav',True)
return I
elif var==10:
J=playsound('audio-alphabet/J.wav',True)
return J
elif var==11:
K=playsound('audio-alphabet/K.wav',True)
return K
elif var==12:
L=playsound('audio-alphabet/L.wav',True)
return L
elif var==13:
M=playsound('audio-alphabet/M.wav',True)
return M
elif var==14:
N=playsound('audio-alphabet/N.wav',True)
return N
elif var==15:
O=playsound('audio-alphabet/O.wav',True)
return O
elif var==16:
P=playsound('audio-alphabet/P.wav',True)
return P
elif var==17:
Q=playsound('audio-alphabet/Q.wav',True)
return Q
elif var==18:
R=playsound('audio-alphabet/R.wav',True)
return R
elif var==19:
S=playsound('audio-alphabet/S.wav',True)
return S
elif var==20:
T=playsound('audio-alphabet/T.wav',True)
return T
elif var==21:
U=playsound('audio-alphabet/U.wav',True)
return U
elif var==22:
V=playsound('audio-alphabet/V.wav',True)
return V
elif var==23:
W=playsound('audio-alphabet/W.wav',True)
return W
elif var==24:
X=playsound('audio-alphabet/X.wav',True)
return X
elif var==25:
Y=playsound('audio-alphabet/Y.wav',True)
return Y
elif var==26:
Z=playsound('audio-alphabet/Z.wav',True)
return Z
现在这是应用程序崩溃的部分。
class LetterAScreen(Screen):
def on_enter(self):
self.loader(
def loader(self):
self.identity()
self.verifier()
def identity(self):
global where
iden=Identifier()
lol.fn_compare()
def verifier(self):
iden=Identifier()
global where
count = 1
while (count>0 and where != 1):
self.identity()
count=count+1
iden.fn_verify()
我计划有26个屏幕A-Z,它们都具有相同的功能。但是,我什至不能进步。这里的问题是当我进入上述屏幕时,应用程序崩溃并且内存和CPU超载。我在代码中尝试做的是让identity
函数运行fn_compare
函数。然后,verifier
类将决定global where variable
等于1
还是letetr A
。一旦变为True,我就尝试在循环结束时放置fn_verify
函数,以便仅在global where
变量与1
匹配时播放声音。
可能是导致崩溃的原因,我该如何解决?我是Python和Kivy的新手,我真的想了解更多。我希望你能帮助我。
答案 0 :(得分:0)
class LetterAScreen()
中,您实例化了class Identifier()
两次,即2次或两次实例化。方法identity()
中的一个,方法verifier()
中的另一个,self.identity()
。每次循环时,您都在实例化class Identifier()
的新实例。因此,您的内存不足。 def loader(self):
self.iden = Identifier()
self.identity()
self.verifier()
def identity(self):
global where
self.iden.fn_compare()
def verifier(self):
global where
count = 1
while (count > 0 and where != 1):
self.identity()
count = count + 1
self.iden.fn_verify()