Python中TKinter的输入框如何绑定回车键事件调用功能函数

Python中TKinter的输入框如何绑定回车键事件调用功能函数

TKinter中的Entry输入框,与普通的按钮类型有所不同,没有command的属性来直接调用一个函数功能,所以,如果要通过键盘按键来调用一个函数,就必须要通过另外的代码将输入框的事件与具体的函数进行绑定,本文简单介绍一下,如何通过输入框的bind功能来绑定键盘事件。

首先,简单设计一个绑定事件的演示窗口,内容很简单,这里也简要说明了一下TKinter中控件位置的设定。

  • 第一行的标签用于提示说明,
    Label(labelframe, text=“标签显示内容”).pack(side = LEFT, padx=0, pady=5, ipadx=5, ipady=0),表示当side为LEFT左对齐的时候,padx=0,表示标签与左边对齐,pady = 5 表示标签距离顶部为5个长度单位,ipadx = 5 表示标签中的文字在标签内部的距离是5个长度单位,如果需要设置ipady的话,也是同理。
  • 第二行放置的是输入框,可以在其中输入你的内容,entry = Entry(root)
  • 第三行是标题为 “显示输入框中的内容” 的按钮,but = Button(root,text=“显示输入框中的内容”, command=print_info) 这个按钮中的command功能调用的是显示输入框中内容的函数 print_info。
  • 最后,底部的是一个状态栏,在点击按钮后,会显示输入框中的内容。
    Python中TKinter的输入框如何绑定回车键事件调用功能函数_第1张图片

一个简单的TK窗口设定好了之后,我们需要通过bind将键盘事件与输入框进行绑定,在这里可以添加多个与该输入框绑定的事件,比如,将回车键与print_info函数绑定,可以使用这个代码: entry.bind(“”, print_info),其中的"“代表的是回车键,双比如,要将删除键与delete_info函数绑定,可以通过变更参数进行绑定, entry.bind(”", delete_info)。 设定好这两个函数的绑定之后,就可以通过回车键,在状态栏显示输入框中的内容,与点击按钮的功能一样,通过输入删除键盘,将状态栏中的信息清空。

另外,可用的特殊键还有很多比如:Cancel (the Break key), BackSpace, Tab, Return(the Enter key), Shift_L (any Shift key), Control_L (any Control key), Alt_L (any Alt key), Pause, Caps_Lock, Escape, Prior (Page Up), Next (Page Down), End, Home, Left, Up, Right, Down, Print, Insert, Delete, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, Num_Lock, and Scroll_Lock 等。只需要将bind中对应的"“替换为以上的按键名称就可以了,比如说要绑定 Control 作为功能键,则可以改为” "。

由于在通过bind调用函数时需要有个对应的事件参数,所在写需要被调用的函数的时候,要添加一个参数,但是又因为被键钮的command调用的函数,可以不需要参数,所以,比较方便的做法,就是设定一个默认值给参数。比如:defprint_info(event=‘’), 在没有参数的情况下,默认为空。

以下是这个演示案例的全部代码以及详细的注释,供参考。 当然,我相信你一定会举一反三的来使用这个功能,比如要设置一个全局的功能键盘,就可以将事件与主窗口绑定,比如:通过 root.bind(" ", delete_info),我就可以通过按下 Control 键,来删除状态栏中的显示内容。

from tkinter import *

def print_info(event=''):
    # print(event)
    # 按回车键后对应的输出事件信息如下:
    # 
    status_label.configure(text = "你输入的内容是:"+entry.get())

def delete_info(event=''):
    # 清空显示区域的内容:
    status_label.configure(text = "")

# 生成主窗口    
root = Tk()
# 设定主窗口的标题
root.title("输入框事件绑定演示")
# 设定主窗口的尺寸
root.geometry('520x120')
# 为主窗口设定键盘的绑定事件
root.bind("", delete_info)

# 添加一个放置标签的框
labelframe = Frame(root)
labelframe.pack(side = TOP, fill = X)
# 添加一个提示标签, padx, 和 pady 用于调整标签在标签框中的位置,
# 比如以上代码是指,当side为LEFT左对齐的时候,padx =0,表示标签与左边对齐,pady = 5 表示标签距离顶部为5个长度单位, 
# ipadx = 5 表示标签中的文字在标签内部的距离是5个长度单位,如果需要设置ipady的话,也是同理。
Label(labelframe, text="请在输入内容后尝试按回车键、删除键或点击下面的按钮").pack(side = LEFT, padx=0, pady=5, ipadx=5, ipady=0)

# 添加一个输入框
entry = Entry(root)
"""
# 输入框绑定事件,指定一个特殊的键盘按键,比如Return表示回车,更多的按键如下所示:
The user pressed the Enter key. You can bind to virtually all keys on the keyboard: 
The special keys are Cancel (the Break key), BackSpace, Tab, Return(the Enter key), Shift_L (any Shift key), Control_L (any Control key), Alt_L (any Alt key), Pause, Caps_Lock, Escape, Prior (Page Up), Next (Page Down), End, Home, Left, Up, Right, Down, Print, Insert, Delete, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, Num_Lock, and Scroll_Lock
# 引用资料来源:https://python-course.eu/tkinter/events-and-binds-in-tkinter.php
"""
# 添加一个与该输入框绑定的事件,在调用函数中也需要有个对应的参数
# 回车键,绑定信息的显示,
entry.bind("", print_info)
# 删除键,绑定信息的删除
entry.bind("", delete_info)
entry.pack(fill = X)

# 设定程序起动后的焦点为输入框
entry.focus_set()

# 添加一个按键,点击的作用等同于输入框绑定的事件,但是command对应的函数可能没有参数,所以在目录函数中要设定默认值
but = Button(root,text="显示输入框中的内容", command=print_info)
but.pack(padx=5, pady=8)

# 添加一个显示信息的状态栏,
statusframe = Frame(root, bd =1 ,relief = SUNKEN)
statusframe.pack(side = BOTTOM, fill = X)

status_label = Label(statusframe, text='Author Email: [email protected]', anchor =W)
status_label.pack(side = LEFT)

root.mainloop()

以上,就是关于TKinter的输入框以及窗口等其它控件,如何通过bind绑定键盘事件,以及窗口中的控件位置如何通过pack进行设置的全部内容,希望对你有所启发,如有不足之处,请指正,大家共同学习,谢谢!

你可能感兴趣的:(python)