You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Tkinter的Chatterbot应用中绑定Enter键提交输入

解决Chatterbot Tkinter界面Enter键提交输入的问题

没问题,我来帮你把Enter键提交输入的功能加上!只需要对现有代码做两处小修改就能实现你要的input_field.bind("<Return>", enter_pressed)效果,具体步骤如下:

关键修改点

  • 给输入框绑定Return事件:在界面初始化的initialize方法中,给输入框添加Enter键的事件绑定
  • 兼容事件参数:调整get_response函数,让它能接受事件绑定自动传递的event参数(同时不影响原按钮点击的调用)

修改后的完整代码

from chatterbot import ChatBot
import tkinter as tk
try:
    import ttk as ttk
    import ScrolledText
except ImportError:
    import tkinter.ttk as ttk
    import tkinter.scrolledtext as ScrolledText
import time

class TkinterGUIExample(tk.Tk):
    def __init__(self, *args, **kwargs):
        """ Create & set window variables. """
        tk.Tk.__init__(self, *args, **kwargs)

        self.chatbot = ChatBot(
            "GUI Bot",
            storage_adapter="chatterbot.storage.SQLStorageAdapter",
            logic_adapters=[
                "chatterbot.logic.BestMatch"
            ],
            input_adapter="chatterbot.input.VariableInputTypeAdapter",
            output_adapter="chatterbot.output.OutputAdapter",
            database="../database.db"
        )

        self.title("Chatterbot")
        self.initialize()

    def initialize(self):
        """ Set window layout. """
        self.grid()

        self.respond = ttk.Button(self, text='Get Response', command=self.get_response)
        self.respond.grid(column=0, row=0, sticky='nesw', padx=3, pady=3)

        self.usr_input = ttk.Entry(self, state='normal')
        self.usr_input.grid(column=1, row=0, sticky='nesw', padx=3, pady=3)
        # 新增:绑定Enter键到get_response函数
        self.usr_input.bind("<Return>", self.get_response)

        self.conversation_lbl = ttk.Label(self, anchor=tk.E, text='Conversation:')
        self.conversation_lbl.grid(column=0, row=1, sticky='nesw', padx=3, pady=3)

        self.conversation = ScrolledText.ScrolledText(self, state='disabled')
        self.conversation.grid(column=0, row=2, columnspan=2, sticky='nesw', padx=3, pady=3)

    # 修改:添加可选的event参数,兼容按钮点击和Enter事件触发
    def get_response(self, event=None):
        """ Get a response from the chatbot and display it. """
        user_input = self.usr_input.get()
        if not user_input:  # 可选:空输入不提交,避免无效请求
            return
        self.usr_input.delete(0, tk.END)

        response = self.chatbot.get_response(user_input)

        self.conversation['state'] = 'normal'
        self.conversation.insert(
            tk.END,
            "Human: " + user_input + "\n" + "ChatBot: " + str(response.text) + "\n"
        )
        self.conversation['state'] = 'disabled'
        # 自动滚动到最新消息,优化体验
        self.conversation.see(tk.END)
        time.sleep(0.5)

gui_example = TkinterGUIExample()
gui_example.mainloop()

额外优化说明

我还加了两个实用小优化:

  1. 空输入判断:如果输入框是空的,按Enter不会触发提交,避免向机器人发送无效请求
  2. 聊天框自动滚动:每次新消息加入后自动滚动到最底部,不用手动拖动滚动条查看最新内容

这样修改后,你既可以点击按钮提交输入,也可以直接按Enter键提交,完全符合你的需求!

内容的提问来源于stack exchange,提问作者Shaswat Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:07:48