使用tkin的Python多线程处理

2024-10-02 22:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图建立一个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()

我只需要知道如何正确使用它。求你了

另外,我已经阅读了所有的文档和关于多线程的所有东西,但它就是不起作用:'(

提前感谢:)


Tags: importtopdefascallbacklistencommandpack
1条回答
网友
1楼 · 发布于 2024-10-02 22:26:55

你的线程调用错误

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

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

您应该使用这样的线程:

^{pr2}$

另外一个注意事项是,你真的不需要这个函数嵌套在你的另一个函数里面,你可以把它移到外面,它会有tex参数,因为你要把这个参数传递给你的线程。在

相关问题 更多 >