2016-04-12 18 views
1

私はTkinter GUIをビルドしようとしていますが、私は個人的なアシスタントのようなものですが、私は苦労しています。(GUIを更新してspeech_recognitionで聞くと、そしてここに私のコードとマルチスレッドを使用しての私の失敗した試みだ。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() 

私は私がしかし、私はそれを使用する方法についてこだわっているマルチスレッドを使用する必要があることを理解!応答していない!

語りますそれを正しく使用する方法を知っているだけです。

ps私は、マルチスレッド上のすべてのドキュメントとすべてを読んだが、それだけでは動作しません: '(

は、事前にありがとう:)

答えて

4

をあなたは、間違って

t3 = threading.Thread(target = callback(tex)) 
をあなたのスレッドを呼んでいます

callback(tex)は、ターゲットとして渡す代わりに、関数を呼び出しています。あなたはこのようにそれを使用したい場合は、あなたがこのようにスレッドを使用する必要がありますtarget = lambda: callback(tex)

を使用する必要があります。また

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

別のノートで、あなたは本当にの内部にネストその機能を必要としないあなた他の関数では、あなたはそれを外側に移動することができ、あなたのスレッドにarguementを渡しているので、texの引数を持ちます。

関連する問題