我试图从输入框中获取用户输入,一旦按下按钮,则将其显示在tk.Text()中。我没有在标签中这样做的原因是因为我希望gui看起来像这样:
用户:嗨
响应:怎么了
用户:什么都没有。
我查看了此文档:http://effbot.org/tkinterbook/text.htm 并且示例使用here,但无法正常工作。
result = None
window = Tk()
def Response():
global result
result = myText.get()
#The below print displays result in console, I'd like that in GUI instead.
#print "User: ", result
#Creating the GUI
myText = tk.StringVar()
window.resizable(False, False)
window.title("Chatbot")
window.geometry('400x400')
User_Input = tk.Entry(window, textvariable=myText, width=50).place(x=20, y=350)
subButton = tk.Button(window, text="Send", command=Response).place(x =350, y=350)
displayText = Text(window, height=20, width=40)
displayText.pack()
displayText.configure(state='disabled')
scroll = Scrollbar(window, command=displayText).pack(side=RIGHT)
window.mainloop()
我尝试了以下形式的变化:
displayText.insert(window,result)
和displayText.insert(End, result)
但是当我提交文本时仍然一无所获。关键是显然保留用户的最后存储的文本,而不是覆盖它,而只是在彼此之间显示每个输入,而不是覆盖它,我建议文本是实现此目的的最佳方法。
更新
感谢凯文(Kevin)的评论和回答,用户文本现在显示在gui中,但是当我输入内容并再次单击“发送”时,它将显示在侧面,如下所示:
嘿嘿
而不是:
嘿
嘿
我的聊天机器人已链接到Dialogflow,因此在每个用户输入之间,聊天机器人都会响应。
答案 0 :(得分:1)
正如jasonharper在注释中指出的那样,您需要先取消禁用文本框,然后才能向其中添加文本。此外,displayText.insert(window,result)
不是正确的调用方式。 insert
的第一个参数应该是索引,而不是窗口对象。
尝试:
def Response():
#no need to use global here
result = myText.get()
displayText.configure(state='normal')
displayText.insert(END, result)
displayText.configure(state='disabled')
(取决于您最初导入tkinter的方式,您可能需要执行tk.END
或tkinter.END
而不只是END
。由于您没有提供tkinter的这一部分,因此很难分辨。您的代码)