如何将回车键绑定到 tkinter 中的函数?

新手上路,请多包涵

本人Python初学自学,跑MacOS。

我正在 tkinter 中使用文本解析器 GUI 制作一个程序,您可以在 Entry 小部件中键入命令,然后点击 Button 小部件,这会触发我的 parse() 函数等,将结果打印到 Text 小部件,文本冒险风格。

> 绕过按钮

我不能让你那样做,戴夫。

我试图找到一种方法来摆脱每次用户发出命令时将鼠标 Button 的需要,但这比我想象的要难。

我猜正确的代码看起来像 self.bind('<Return>', self.parse()) ?但我什至不知道把它放在哪里。 root , __init__ , parse()create_widgets()

需要明确的是,任何人都应该在 prog 中按回车键的唯一原因是触发 parse() ,因此不需要特别支持 Entry 小部件。它在哪里工作都很好。

回复7stud,基本格式:

 from tkinter import *
import tkinter.font, random, re

class Application(Frame):

    def __init__(self, master):
        Frame.__init__(self, master, ...)
        self.grid()
        self.create_widgets()
        self.start()


    def parse(self):
        ...

    def create_widgets(self):

        ...

        self.submit = Button(self, text= "Submit Command.", command= self.parse, ...)
        self.submit.grid(...)


root = Tk()
root.bind('<Return>', self.parse)

app = Application(root)

root.mainloop()

原文由 Ghosty 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 674
2 个回答

尝试运行以下程序。您只需确保在按下 Return 时您的窗口具有焦点——为确保它确实如此,请先单击该按钮几次,直到您看到一些输出,然后不要单击其他任何地方,单击 Return。

 import tkinter as tk

root = tk.Tk()
root.geometry("300x200")

def func(event):
    print("You hit return.")
root.bind('<Return>', func)

def onclick():
    print("You clicked the button")

button = tk.Button(root, text="click me", command=onclick)
button.pack()

root.mainloop()

然后,当使 button clickhitting Return 调用相同的函数时,您只需稍微调整一下,因为命令函数需要是一个不带参数的函数,而绑定函数需要是一个接受一个参数(事件对象)的函数:

 import tkinter as tk

root = tk.Tk()
root.geometry("300x200")

def func(event):
    print("You hit return.")

def onclick(event=None):
    print("You clicked the button")

root.bind('<Return>', onclick)

button = tk.Button(root, text="click me", command=onclick)
button.pack()

root.mainloop()

或者,您可以放弃使用按钮的命令参数,而是使用 bind() 将 onclick 函数附加到按钮,这意味着该函数需要采用一个参数——就像 Return 一样:

 import tkinter as tk

root = tk.Tk()
root.geometry("300x200")

def func(event):
    print("You hit return.")

def onclick(event):
    print("You clicked the button")

root.bind('<Return>', onclick)

button = tk.Button(root, text="click me")
button.bind('<Button-1>', onclick)
button.pack()

root.mainloop()

这是在课堂设置中:

 import tkinter as tk

class Application(tk.Frame):
    def __init__(self):
        self.root = tk.Tk()
        self.root.geometry("300x200")

        tk.Frame.__init__(self, self.root)
        self.create_widgets()

    def create_widgets(self):
        self.root.bind('<Return>', self.parse)
        self.grid()

        self.submit = tk.Button(self, text="Submit")
        self.submit.bind('<Button-1>', self.parse)
        self.submit.grid()

    def parse(self, event):
        print("You clicked?")

    def start(self):
        self.root.mainloop()

Application().start()

原文由 7stud 发布,翻译遵循 CC BY-SA 3.0 许可协议

另一种选择是使用 lambda:

 ent.bind("<Return>", (lambda event: name_of_function()))

完整代码:

 from tkinter import *
from tkinter.messagebox import showinfo

def reply(name):
    showinfo(title="Reply", message = "Hello %s!" % name)

top = Tk()
top.title("Echo")

Label(top, text="Enter your name:").pack(side=TOP)
ent = Entry(top)
ent.bind("<Return>", (lambda event: reply(ent.get())))
ent.pack(side=TOP)
btn = Button(top,text="Submit", command=(lambda: reply(ent.get())))
btn.pack(side=LEFT)

top.mainloop()

如您所见,使用未使用的变量“event”创建 lambda 函数可以解决问题。

原文由 Seçkin Savaşçı 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题