Python与tkintermultithreading

我试图build立一个像个人助理一样的Tkinter GUI,但是我陷入了第一个障碍:(当我更新GUI并且用speech_recognition听时,它冻结,并且说没有响应!我知道我需要使用multithreading,但我坚持如何使用它!

这是我的代码和我尝试使用multithreading的失败。

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

我只需要知道如何正确使用它。 请

我已经阅读了所有的文件和multithreading的一切,但它只是不工作:'(

先谢谢你 :)

你不正确地调用你的线程,

  t3 = threading.Thread(target = callback(tex)) 

callback(tex)正在调用该函数,而不是将其作为目标传入。 如果你想用这种方式,你需要使用target = lambda: callback(tex)

你应该使用这样的线程:

  t3 = threading.Thread(target = callback, args=(tex,)) 

另外还有一点需要注意的是,你并不需要嵌套在其他函数中的函数,因为你可以把这个函数传递给你的线程。