Потоки с Tkinter и речь в текст - PullRequest
0 голосов
/ 02 июля 2019

Я должен сделать нити в 1 из 2 кодов; один из них преобразование речи в текст , а другой - Tkinter GUI , и они оба взаимосвязаны: если кто-то что-то говорит, то он должен внести некоторые изменения в GUI. Проблема в том, что когда я делаю GUI потока и речь в mainloop, он работает нормально, пока я не выполню условие, что если кто-то говорит "HOME", вы должны показать новую кнопку в GUI; выдает ошибку, что MAIN THREAD не в основном цикле И когда я пытаюсь сохранить речевой код в потоке и графический интерфейс в mainloop; выдает ошибку, что " SIGNAL должен быть в mainloop " Если я оставляю оба в основном цикле и не выполняю многопоточность, то, если сначала пишется GUI, то он показывает GUI и застревает там, а если речь пишется первой, он продолжает выполнять речевой код (так как это бесконечный цикл FOR)

#*********************************** IMPORTING MODULES*****************
import tkinter
from tkinter import*
import tkinter.messagebox
import sqlite3
import os
from multiprocessing import Process
from pocketsphinx import LiveSpeech, get_model_path
import threading
from time import sleep

model_path = get_model_path()
window = tkinter.Tk()
window.title("Smart Notice Board")

top = Canvas(window,width=400,height=200)
top.pack(fill=X)

#*************** TKINTER GUI CODE******************
def gui():

 button_5 = Button(text='PORTAL SYSTEM', height = 2, width=17, activebackground = '#33B5e5', bg = 'brown', fg = 'white',command  = portal )
 top.create_window(80,80, anchor='nw', window = button_5)
 window.mainloop()
def portal():
   print("2")



#****************  speech TO text CODE***************

def speech(): 
    speech = LiveSpeech(
        verbose=False,
        sampling_rate=16000,
        buffer_size=2048,
        no_search=False,
        full_utt=False,
        hmm=os.path.join(model_path, 'en-us'),
        lm=os.path.join(model_path, '8582.lm'),
        dic=os.path.join(model_path, '8582.dict')
    )

    for phrase in speech:
        print(phrase)
        a=str(phrase)
        print(a)

#************************** MAIN LOOP************************

if __name__ == "__main__":

    #************ FOR THREADING************


    thread1 = threading.Thread(target=gui)
    #thread2 = threading.Thread(target=speech)
    #thread1.daemon = True
    thread1.start()
    #thread2.start()


    #thread1.join()
    #thread2.join()


    #************ FOR MULTIPROCESSING****************

    #processes=[]
    #P1 = Process(target=gui)
    #P2 = Process(target=speech)
    #processes.append(P1)
    #processes.append(P2)
    #P2.daemon = True
    # Will execute both in parallel
    #P1.start()
    #P2.start()
    # Joins threads back to the parent process, which is this
    # program
    #P1.join()
    #P2.join()


    #****************** live speech code*************
    #gui()
    #speech()
    speech = LiveSpeech(
        verbose=False,
        sampling_rate=16000,
        buffer_size=2048,
        no_search=False,
        full_utt=False,
        hmm=os.path.join(model_path, 'en-us'),
        lm=os.path.join(model_path, '8582.lm'),
        dic=os.path.join(model_path, '8582.dict')
    )

    for phrase in speech:
        print(phrase)
        a=str(phrase)
        print(a)

        button_6= Button(text='HOME SYSTEM', height = 2, width=17, activebackground = '#33B5e5', bg = 'brown', fg = 'white',command  = portal )
        top.create_window(20,20, anchor='nw', window = button_6)

Код работает нормально, пока я не поставлю, если cond,

Code works fine until i put if cond

Показывает эту ошибку,

show this error

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...