Есть ли способ заставить tkinter выполнить команду сразу после открытия? - PullRequest
0 голосов
/ 14 мая 2018

В настоящее время я просто проверяю идею чего-то простого, используя в качестве примера программу тренировки. Я очень плохо знаком с Python, и это больше испытание, чем что-либо еще. То, что я хочу, чтобы это произошло, это открыть окно с тренировкой (просто метка tkinter), но затем пассивно в фоновом режиме запустить команду распознавания речи, чтобы поймать человека, говорящего «следующий». Мне не интересно, чтобы люди говорили мне, как сделать другие вещи более эффективными, потому что я знаю, что это плохо.

Мне просто хотелось бы, чтобы команда SpeechRecognition1 выполнялась пассивно, пока отображается метка "5 pressups". Есть ли способ сделать это?

from tkinter import *
import sys
import speech_recognition as sr

def NextWorkout1():
    workout1.destroy()
    Workout2()

def Workout1():
    global workout1

    workout1 = Tk()

    workout1.geometry("300x44")
    workout1.configure(background="lightblue")
    workout1.resizable(0,0)
    workout1.title("Pressups")

    insLabel = Label(workout1, text="5 pressups", fg="red", bg="lightblue", font="Arial 25 bold")
    insLabel.pack()

    workout1.mainloop()


def Workout2():
    global workout2

    workout2 = Tk()
    workout2.geometry("300x50")
    workout2.configure(background="lightblue")
    workout2.resizable(0,0)
    workout2.title("Starjumps")

    insLabel = Label(workout2, text="15 starjumps", fg="red", bg="lightblue", font="Arial 25 bold")
    insLabel.pack()

    workout2.mainloop()

def SpeechRecognition1():
    r = sr.Recognizer()

    with sr.Microphone() as source:
        audio = r.listen(source)

    for i in range(1):
        command = (r.recognize_google(audio))

        if command == "next":
            NextWorkout1()
        else:
            print("hi")

def SpeechRecognition2():
    global WorkoutNumber

    WorkoutNumber = 0
    r = sr.Recognizer()

    with sr.Microphone() as source:
        audio = r.listen(source)

    for i in range(1):
        command = (r.recognize_google(audio))

        if command == "next":
            NextWorkout2()

        else:
            print("hi")

Workout1()

1 Ответ

0 голосов
/ 14 мая 2018

используйте функцию after_idle с вашей функцией в качестве функции обратного вызова

в этом порядке

from threading import Thread

workout1 = Tk()

thread = Thread(target = SpeechRecognition1)
workout1.after_idle(thread.start)

workout1.mainloop()
...