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

Gho*_*sty 33 python tkinter key-bindings python-3.x

我是一个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()
Run Code Online (Sandbox Code Playgroud)

7st*_*tud 47

尝试运行以下程序.当你点击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()
Run Code Online (Sandbox Code Playgroud)

然后你只需稍微调整一下button clickhitting Return调用相同的函数 - 因为命令函数需要是一个不带参数的函数,而bind函数需要是一个带有一个参数的函数(事件对象) ):

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()
Run Code Online (Sandbox Code Playgroud)

或者,您可以放弃使用按钮的命令参数,而是使用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()
Run Code Online (Sandbox Code Playgroud)

这是在课堂设置中:

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()
Run Code Online (Sandbox Code Playgroud)


Seç*_*şçı 11

另一种选择是使用lambda:

ent.bind("<Return>", (lambda event: name_of_function()))
Run Code Online (Sandbox Code Playgroud)

完整代码:

from tkinter import *
from tkinter.messagebox import showinfo

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


top = Tk()
top.title("Echo")
top.iconbitmap("Iconshock-Folder-Gallery.ico")

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()
Run Code Online (Sandbox Code Playgroud)

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