Как сделать 2-секундную задержку для возвращаемого значения в tkinter.? - PullRequest
0 голосов
/ 01 августа 2020

Как сделать так, чтобы бот ответил на «привет» через 2 секунды произнесения «хай»? Я использовал sleep (2) внутри sent (). Но потерпел неудачу. Мне нужно, когда пользовательский текст hai его нужно распечатать, и через 2 секунды бот отвечает привет .. что я могу сделать, чтобы получить это как o / p?

from tkinter import *

root=Tk()
ABC =Frame(root,bg='#010101',bd=20,relief=RIDGE)

ABC.grid()

def sent():

  txt =Text(ABC,height=2,width=40,padx=10,pady=10)

  txt.tag_config("right", justify="right")
  txt.pack()
  v=e.get()
  sent="You => " + v
  txt.insert(END,"\n"+sent)

  if v=='hai':
     
    txt =Text(ABC,height=2,width=40,padx=10,pady=10)
    txt.tag_config("right", justify="right")
    txt.pack()
    a='hello'+" <== Bot "
    txt.insert(END,"\n"+a,"right")
    txt.config(state=DISABLED)

   e.delete(0,END)


ABC1=Frame(root,bd=20,)
ABC1.grid()



#txt.tag_configure("green", foreground="green")

#txt.grid(column=0,row=0)


e =Entry(ABC1,width=30,bd=2,insertwidth=5,font=("aril",7))
e.grid(row=1,column=0)

b =Button(ABC1,text='sent',command=sent)
b.grid(row=1,column=1)
root.mainloop()

Ответы [ 2 ]

1 голос
/ 03 августа 2020

В моем ответе на ваш другой вопрос уже сказано, что вы можете использовать after(), чтобы отложить ответ бота:

def bot_reply(msg):
    txt =Text(ABC,height=2,width=40,padx=10,pady=10)
    txt.tag_config("right", justify="right")
    txt.pack()
    a=msg+" <== Bot"
    txt.insert(END,"\n"+a,"right")
    txt.config(state=DISABLED)

def sent():

  txt =Text(ABC,height=2,width=40,padx=10,pady=10)

  txt.tag_config("right", justify="right")
  txt.pack()
  v=e.get()
  sent="You => " + v
  txt.insert(END,"\n"+sent)

  if v=='hai':
     root.after(2000, bot_reply, 'hello')

  e.delete(0,END)

Но я предпочитаю использовать Label вместо Text:

def bot_reply(msg):
    reply = msg + " <== Bot"
    Label(ABC, text=reply, height=2, width=40, bd=1, relief='sunken',
          padx=10, pady=10, anchor='e').pack()

def sent():
    v = e.get().strip()
    Label(ABC, text="You => "+v, height=2, width=40, bd=1, relief='sunken',
          padx=10, pady=10, anchor='w').pack()
    if v == 'hai':
        root.after(2000, bot_reply, 'hello')
0 голосов
/ 01 августа 2020

Я переделал ваш код. некоторые переменные были определены до того, как они были использованы.

from tkinter import *
import time
root = Tk()
ABC = Frame(root, bg='#010101', bd=20, relief=RIDGE)

ABC.grid()
ABC1 = Frame(root, bd=20, )
ABC1.grid()
e = Entry(ABC1, width=30, bd=2, insertwidth=5, font=("aril", 7))
e.grid(row=1, column=0)

def sent():
    root.after(5000)
    txt = Text(ABC, height=2, width=40, padx=10, pady=10)

    txt.tag_config("right", justify="right")
    txt.pack()
    v = e.get()
    sent = "You => " + v
    txt.insert(END, "\n" + sent)

    if v == 'hai':
        txt = Text(ABC, height=2, width=40, padx=10, pady=10)
        txt.tag_config("right", justify="right")
        txt.pack()
        a = 'hello' + " <== Bot "
        txt.insert(END, "\n" + a, "right")
        txt.config(state=DISABLED)


# v.delete(0, END)



# txt.tag_configure("green", foreground="green")

# txt.grid(column=0,row=0)




b = Button(ABC1, text='sent', command=sent)
b.grid(row=1, column=1)
root.mainloop()

Я установил задержку внутри функции на 5 секунд, поиграйте со всем, как можете. не забудьте проголосовать, если ответ помог.

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