Правильный способ получить то, что возвращается от функции, вызываемой из кнопки, сохранить ее как другую переменную вне функции - PullRequest
0 голосов
/ 21 апреля 2020

класс Toplevel1: def cancel_login (self): msg = tk.messagebox.askyesno (title = "Страница входа", message = "Вы уверены, что хотите отменить вход"), если msg: exit ()

def login(self):
    name = self.txtUser.get()
    passwd = self.txtPasswd.get()
    if name and passwd:
        if name == "Samuel" and passwd == "Password191":
            tk.messagebox.showinfo("Login Page", "Congratulations, Login was successful")
        else:
            tk.messagebox.showerror("Login Page", "Incorrect username or password")

        self.txtUser.select_clear and self.txtPasswd.select_clear()

def speak(text):
    engine = pyttsx3.init()
    engine.setProperty('rate', 150)
    engine.setProperty('volume', 1.0)
    engine.setProperty('voice', "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0")
    engine.say(text)
    engine.runAndWait()

def get_audio(self):
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("Listening...")

        audio = r.listen(source, 2)
        global said
        said = ""
        try:
            said = r.recognize_google(audio)
            # said = r.recognize_sphinx(audio)
            print(said)
        except Exception as e:
            print("Exception: " + str(e))

def __init__(self, top=None):
    '''This class configures and populates the toplevel window.
       top is the toplevel containing window.'''
    _bgcolor = '#d9d9d9'  # X11 color: 'gray85'
    _fgcolor = '#000000'  # X11 color: 'black'
    _compcolor = '#d9d9d9'  # X11 color: 'gray85'
    _ana1color = '#d9d9d9'  # X11 color: 'gray85'
    _ana2color = '#ececec'  # Closest X11 color: 'gray92'

    top.geometry("504x240+385+176")
    top.minsize(120, 1)
    top.maxsize(1268, 765)
    top.resizable(1, 1)
    top.title("Login Page")
    top.configure(background="#d9d9d9")

    self.Label1 = tk.Label(top)
    self.Label1.place(relx=0.139, rely=0.208, height=24, width=79)
    self.Label1.configure(background="#d9d9d9")
    self.Label1.configure(disabledforeground="#a3a3a3")
    self.Label1.configure(foreground="#000000")
    self.Label1.configure(text='''Username:''')

    self.Label2 = tk.Label(top)
    self.Label2.place(relx=0.119, rely=0.375, height=24, width=104)
    self.Label2.configure(background="#d9d9d9")
    self.Label2.configure(disabledforeground="#a3a3a3")
    self.Label2.configure(foreground="#000000")
    self.Label2.configure(text='''Password:''')

    self.txtUser = tk.Entry(top)
    self.txtUser.place(relx=0.337, rely=0.208, height=20, relwidth=0.603)
    self.txtUser.configure(background="white")
    self.txtUser.configure(disabledforeground="#a3a3a3")
    self.txtUser.configure(font="TkFixedFont")
    self.txtUser.configure(foreground="#000000")
    self.txtUser.configure(insertbackground="black")

    self.txtPasswd = tk.Entry(top)
    self.txtPasswd.place(relx=0.337, rely=0.375, height=20, relwidth=0.603)
    self.txtPasswd.configure(background="white")
    self.txtPasswd.configure(disabledforeground="#a3a3a3")
    self.txtPasswd.configure(font="TkFixedFont")
    self.txtPasswd.configure(foreground="#000000")
    self.txtPasswd.configure(insertbackground="black")

    self.btn_cancel = tk.Button(top)
    self.btn_cancel.place(relx=0.337, rely=0.583, height=24, width=47)
    self.btn_cancel.configure(activebackground="#ececec")
    self.btn_cancel.configure(activeforeground="#000000")
    self.btn_cancel.configure(background="#d9d9d9")
    self.btn_cancel.configure(disabledforeground="#a3a3a3")
    self.btn_cancel.configure(foreground="#000000")
    self.btn_cancel.configure(highlightbackground="#d9d9d9")
    self.btn_cancel.configure(highlightcolor="black")
    self.btn_cancel.configure(pady="0")
    self.btn_cancel.configure(text='''Cancel''')
    self.btn_cancel.configure(command=self.cancel_login)

    self.btn_login = tk.Button(top)
    self.btn_login.place(relx=0.556, rely=0.583, height=24, width=41)
    self.btn_login.configure(activebackground="#ececec")
    self.btn_login.configure(activeforeground="#000000")
    self.btn_login.configure(background="#d9d9d9")
    self.btn_login.configure(disabledforeground="#a3a3a3")
    self.btn_login.configure(foreground="#000000")
    self.btn_login.configure(highlightbackground="#d9d9d9")
    self.btn_login.configure(highlightcolor="black")
    self.btn_login.configure(pady="0")
    self.btn_login.configure(text='''Login''')
    self.btn_login.configure(command=self.get_audio)

if name == ' main ': vp_start_ gui ()

Не беспокойтесь о том, почему я вызываю функцию из кнопка входа в систему, но главная проблема в том, что я не могу найти работающий способ сохранить «сказанное», возвращенное из функции get_audio (), и сохранить его как text = «возвращенное сказанное слово»

Любая помощь или рекомендации будет глубоко оценен. Я застрял с этой проблемой в течение нескольких дней, просто не могу найти выход. Я пытался сделать указанную глобальную переменную, но она не передавала ее значение, когда я вызывал ее вне функции

1 Ответ

0 голосов
/ 21 апреля 2020

Я предполагаю, что вашей конечной целью является отображение текста с r.recognize_google(audio), например, в виджете метки.

Полагаю, вы могли бы сделать следующее:

said = r.recognize_google(audio)
self.Label.configure(text=said)

Заменить метку на любой виджет, который вам нужен для отображения текста. Конечно, вы должны проверить, имеет ли виджет параметр text. Для текстовых виджетов вам нужно использовать .insert()

Однако то, что вы пытаетесь сделать с глобальным, тоже должно работать. Может быть, попытаться удалить said = "" из своего кода?

Если, однако, вы хотите просто получить текст из функции, например использовать его в другой функции, вам придется заставить get_audio вернуть текст ( return(said)), а затем используйте это как переменную в любой функции, которая может вам понадобиться.

Что-то вроде

def get_audio(self):

      ...

            try:
                said = r.recognize_google(audio)
                return(said)
            except Exception as e:
                print("Exception: " + str(e))


def do_Something(self):
        said = self.get_audio()
        ...
...