簡體   English   中英

使用tkinter的Python多線程

[英]Python multi-threading with tkinter

我正在嘗試構建一個類似於個人助理的Tkinter GUI,但是我陷入了第一個障礙:(當我更新GUI並以Speech_recognition收聽時,它凍結並說不響應!我理解我需要使用多線程,但是我對如何使用它感到困惑!

這是我的代碼,也是我嘗試使用多線程的失敗嘗試。

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

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

ps我已經閱讀了所有文檔以及有關多線程的所有內容,但這根本行不通:'(

先感謝您 :)

您錯誤地調用了線程,

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

callback(tex)正在調用該函數,而不是將其作為目標傳遞。 如果要以這種方式使用它,則需要使用target = lambda: callback(tex)

您應該使用這樣的線程:

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

另外要注意的是,您實際上不需要將該函數嵌套在其他函數中,您可以將其移到外部,並且由於將論據傳遞到線程中而將具有tex論據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM