我试图建立一个Tkinter图形用户界面,有点像个人助理,但是我遇到了第一个障碍:(当我更新图形用户界面并使用语音识别进行监听时,它会冻结并说没有响应!我知道我需要使用多线程,但我却被困在如何使用它!在
这是我的代码和我在使用多线程时失败的尝试。在
import tkinter as tk
from subprocess import call as say
import winsound
import speech_recognition as sr
import threading
def cbc(tex):
return lambda : callback(tex)
def callback(tex):
button = "Listen"
tex.insert(tk.END, button)
tex.see(tk.END)# Scroll if necessary
def listen(tex):
def callback(tex):
g = ("Say,,your,,command,,after,,the,,beep")
say('espeak '+ g, shell = True)
winsound.Beep(1000,500)
ltext = 'listening...'
tex.insert(tk.END, ltext)
r = sr.Recognizer()
with sr.Microphone() as source:
damand = r.listen(source)
damandtxt = (recognizer_google(damand))
tex.insert(tk5.END, damandtxt)
tex.see(tk.END)
t3 = threading.Thread(target = callback(tex))
t3.daemon = True
t3.start()
top = tk.Tk()
tex = tk.Text(master=top)
tex.pack(side=tk.RIGHT)
bop = tk.Frame()
bop.pack(side=tk.LEFT)
tk.Button(bop, text='Listen', command=lambda: listen(tex)).pack()
tk.Button(bop, text='Exit', command=top.destroy).pack()
top.mainloop()
我只需要知道如何正确使用它。求你了
另外,我已经阅读了所有的文档和关于多线程的所有东西,但它就是不起作用:'(
提前感谢:)
你的线程调用错误
callback(tex)
正在调用函数,而不是将其作为目标传入。如果您想这样使用它,您需要使用target = lambda: callback(tex)
您应该使用这样的线程:
^{pr2}$另外一个注意事项是,你真的不需要这个函数嵌套在你的另一个函数里面,你可以把它移到外面,它会有
tex
参数,因为你要把这个参数传递给你的线程。在相关问题 更多 >
编程相关推荐