python - Tkinter Entrybox如何拥有类似Shell Input()的输入功能?

标签 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()

最佳答案

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

关于python - Tkinter Entrybox如何拥有类似Shell Input()的输入功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41200284/

相关文章:

python - 在python中将多个值绘制到一个键

java - 如何从声明 JFrame 的类之外的类中关闭 JFrame

Python 3,range().append() 返回错误 : 'range' object has no attribute 'append'

java - GUI 中监听器嵌套类的优点

c++ - 单元测试 MFC UI 应用程序?

python - 如何向列表中的每个项目添加文本

python - 聚合数据框并计算每个类别

python - Odoo 不显示 Markdown 图像

python - wxpython 将多个 wx.NumCtrl 放入数据结构中以便在 matplotlib 中绘图

python - 从 YouTube-DL 下载的音频文件已损坏