【问题标题】:use enter key in tkinter python在 tkinter python 中使用回车键
【发布时间】:2018-05-30 04:48:40
【问题描述】:

我正在尝试创建一个chatterbot 应用程序。我想使用"Enter" 键将输入提供给我的BOT。我正在尝试各种使用方式,但运气不好。请在下面的代码中建议如何使用"input_field.bind("<Return>", enter_pressed)"

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)

        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)

    def get_response(self):
        """
        Get a response from the chatbot and display it.
        """
        user_input = self.usr_input.get()
        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'

        time.sleep(0.5)


gui_example = TkinterGUIExample()
gui_example.mainloop()

【问题讨论】:

  • 你的问题有点不清楚。您询问如何使用input_field.bind("<Return>", enter_pressed),但您的代码没有input_field 小部件或enter_pressed 方法。
  • 如果您将代码简化为 minimal reproducible example 以解决您关于绑定 Enter 键的实际问题,这将有所帮助。 ChatBot 的东西大多是无关紧要的,它需要人们安装 ChatBot 才能运行和测试你的代码。

标签: python python-3.x tkinter tkinter-entry


【解决方案1】:

不绑定input_field,尝试绑定root

root = tk.TK()
root.bind('<Return>', enter_pressed)

在你的代码中尝试使用

tk.TK.bind('<Return>', enter_pressed)

__init__() 函数中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多