【问题标题】:Detect intent from Entry instead of manual Dialogflow input从 Entry 检测意图而不是手动 Dialogflow 输入
【发布时间】:2019-01-08 16:03:44
【问题描述】:

所以我在 Python 中有这个来检测输入输入时的意图。

for text in texts:
    text_input = dialogflow.types.TextInput(text=text, language_code=language_code)
    query_input = dialogflow.types.QueryInput(text=text_input)
    response = session_client.detect_intent(session=session, query_input=query_input)

    print ('Chatbot: {}\n'.format(response.query_result.fulfillment_text))
detect_intent_texts("chat-8","abc",["Hey"],"en-us")

还有我现在的用户界面

myText = StringVar()
window.resizable(False, False)
window.title("Chatbot")
window.geometry('400x400')
User_Input = Entry(window, textvariable=myText, width=50).place(x=20, y=350)
subButton = Button(window, text="Send").place(x =350, y=350)
window.mainloop()

我的目标是创建一个接受用户输入的 GUI,并在提交代码时检测用户输入的内容。从上面可以看出,在最后一行 ["Hey"] 上,我可以在这里输入我喜欢的任何内容,并且聊天机器人会在控制台中做出响应,尽管它的工作原理并不是我想要实现的。

我将如何改为命令 [""] 来检测用户在 Entry 小部件中写入的内容?

【问题讨论】:

  • detect_intent_texts("chat-8","abc",[myText.get()],"en-us")
  • @rioV8 我现在试试,谢谢,我想按钮也需要一个函数命令来提交文本,比如def Response(): result = User_Input.get()
  • 好的@rioV8,这似乎工作,会发生什么是GUI弹出,我输入我想要的,例如你好,然后什么都没有发生......当我关闭GUI并等待1 秒响应显示在控制台中。大概是因为print 存在吧?任何想法如何在 GUI 中显示输入和输出?可能有各种标签。
  • 代码太多,无法在评论中输入,请参阅答案。

标签: python tkinter dialogflow-es


【解决方案1】:

place() 仅用于特殊情况。最好使用pack()grid()

我不知道你想对输入的结果做什么(对于文本中的文本),但这是一个有效的 GUI。当您按下“发送”按钮时,您需要销毁主窗口。

使用tk.StringVar().get() 始终适用于 tk 和 ttk 条目小部件。使用Entry.get() 有时会给出空字符串。

import tkinter as tk

result = None

def Response():
  global result
  result = myText.get()
  window.destroy()

window = tk.Tk()

myText = tk.StringVar()
window.resizable(False, False)
window.title("Chatbot")
window.geometry('400x400')
User_Input = tk.Entry(window, textvariable=myText, width=50).pack()
subButton = tk.Button(window, text="Send", command=Response ).pack()
window.mainloop()

print('Entered:', result)

【讨论】:

  • 谢谢你回来,我已经这样做了,但得到一个错误:NameError: name 'none' is not defined 基本上,当用户输入我希望它显示在 GUI 上的内容时,当聊天机器人响应时,它是答案应该放在用户下方,依此类推..(想想 Facebook 信使风格),比如用户:嘿聊天机器人:哦,嘿用户:你好吗.....
  • 我不使用 facebook ;-) 你从哪里得到这个 name 错误?然后你不想破坏response() 处理程序中的GUI。添加一个大的tk.Text() 小部件并将新文本添加到它的末尾。
  • 我也没有,但这是我能想到的唯一例子:D ...好吧,我的错,我没有做为没有。好的!到达那里,但现在文本根本没有显示在 gui 中,它仍然显示在控制台中,大概是因为我说过 print ('Chatbot:', result),我需要它显示类似于用户:嘿聊天机器人:嗨用户:GUI 中的所有内容。尝试过这样的事情但不起作用:botResponse = tk.Label(window,'User:', result)
  • 添加tk.Text() 并操作其内容。您的 tk.Label 不会创建您想要的结果。查看 tkinter 参考页面。
  • 好的@rioV8,我读过的文档提出了类似的建议,但仍在努力解决如何在文本中显示用户输入和聊天机器人输出:def Response(): global result result = myText.get() userChat = tk.Text() userChat.insert(window, INSERT, CHAR, result) 我在正确的轨道上吗有吗?
猜你喜欢
  • 2018-11-16
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多