如何为Tkinter Entrybox提供类似于Shell Input()的输入功能?

时间:2016-12-17 15:45:07

标签: python python-3.x user-interface tkinter

我正在尝试创建一个聊天机器人(称为JARVIS),用户可以在其中与jarvis交谈。我使用tinker创建了一个GUI,带有一个聊天窗口。我只是想让用户在输入框中输入一些内容,这可以回复我的代码,例如:

JARVIS: what is your name?
USER: Vincent
JARVIS: Hello Vincent!

基本上我需要在Tkinkter输入框中输入一个输入函数

这是我到目前为止所得到的(您可以通过运行代码了解我的意思): 我不想更改我的代码,但是任何有关清理它的建议都是非常受欢迎的。

#imports
from tkinter import *
import tkinter as tk

root = Tk()

def cbc(id, tex):
    return lambda : callback(id, tex)
#button user
def callback(id, tex):
    d = 'USER:' + e.get() + '\n'
    tex.insert(tk.END, d)
    tex.see(tk.END)
    e.delete(0, 'end')
#jarvis's words
def jarvisprint(words):
    jarvissay = 'JARVIS:' + str(words) + '\n'
    tex.insert(tk.END, jarvissay)
    tex.tag_add("start", "end -" + str(len(jarvissay) +1) + " chars", 'end -1 lines') #change if colour
    tex.tag_config("start", foreground="black")
    tex.see(tk.END)
#enter user
def returnev(event):
    d = 'USER:' + e.get() + '\n'
    tex.insert(tk.END, d)
    tex.see(tk.END)
    e.delete(0, 'end')

def refresh():
    tex.delete('1.0', 'end')
#--------------------------- textbox
tex = tk.Text(master=root, width=40, fg='blue')
tex.pack(side=tk.TOP)
bop = tk.Frame()
bop.pack(side=tk.LEFT)
#--------------------------- entry box
e = Entry(root)
e.pack(fill = X)
e.focus_set()
e.bind('<Return>', returnev)
#---------------------------send button
b = tk.Button(root, text="send", command=cbc(1, tex))
b.pack()
c = tk.Button(root, text="refresh", command= refresh)
c.pack()
#------CODING-----------------------

jarvisprint("What is your name?")
x = 45
y = 92
z = x + y
jarvisprint(z)
#I WANT TO INSERT AN INPUT FUNCTION HERE E.G. ageVar = str(input("how old are you?"))

#so the user will insert age in the entry box in tkinter

#then call it here>>>>>>>> jarvisprint("you are " + ageVar)

root.mainloop()

1 个答案:

答案 0 :(得分:0)

老实说,我认为这取决于您要通过程序实现的目标。我的意思是你可以轻松地制作一组具有不同响应的数组,并使用 if/else 循环与输入函数配对来制作响应式聊天机器人。那将是一条“简单”的路线,而且我实际上正在做一个这样的小项目。