在本文中,将介绍如何使用 tkinter Entry 小部件。tkinter Entry 小部件允许创建能够输入的单行文本框。
要创建 Entry 单行文本框,请按如下方式使用构造函数:
textbox = tk.Entry(master, **options)
通常,将 Entry 单行文本框输入的当前值与 StringVar 对象相关联。
创建 Entry 单行文本框import tkinter as tkroot = tk.Tk()root.geometry('300x200+200+200')root.title('entry 单行文本框演示')text = tk.StringVar()entry = tk.Entry( root, textvariable=text,)entry.pack(padx=10, pady=10, expand=True)root.mainloop()
要将 Entry 单行文本框中的当前文本作为字符串获取,可以使用 get() 方法。
import tkinter as tkroot = tk.Tk()root.geometry('300x200+200+200')root.title('entry 单行文本框演示')def print_entry(): entry_text=entry.get() print(entry_text)text = tk.StringVar()entry = tk.Entry( root, textvariable=text,)entry.pack(padx=10, pady=10, expand=True)button = tk.Button( root, text="输出", command=print_entry)button.pack(ipadx=5, ipady=5, expand=True)root.mainloop()
以上示例中,创建一个按钮,用于将 Entry 单行文本框的文本内容输出到 shell。
单行文本框获取焦点为了提供更好的用户体验,可以让窗口中的第一个单行文本框自动获得焦点,直接接受用户输入。可以使用 focus() 方法。
作为密码输入框使用要在单行文本框上输入时隐藏敏感信息,例如密码,可以添加参数:show='*'。输入密码时,它不会显示实际字符,而是显示参数中指定的星号。
import tkinter as tkroot = tk.Tk()root.geometry('300x200+200+200')root.title('entry 单行文本框演示')text = tk.StringVar()entry = tk.Entry( root, textvariable=text, show='*')entry.pack(padx=10, pady=10, expand=True)entry.focus()root.mainloop()
如果希望显示的文本可以选择和复制但不能修改,可以将文本框设置为只读。这在用户需要能够查看数据,还有保证数据完整性时非常有用。
import tkinter as tkroot = tk.Tk()root.geometry('300x200+200+200')root.title('entry 单行文本框演示')text = tk.StringVar()entry = tk.Entry( root, textvariable=text,)entry.insert(0, "该文字只读!")entry.config(state='readonly')entry.pack(padx=10, pady=10, expand=True)root.mainloop()
如果想限制文本框文本类型的输入,可以通过验证来执行此操作。例如,一个只接受整数文本框。可以使用参数 validatecommand、validate等检查其有效性。
以下示例中,文本框只接受数字输入,不能输入其他字符。
import tkinter as tkroot = tk.Tk()root.geometry('300x200+200+200')root.title('entry 单行文本框演示')def callback(input): return input.isdigit()text = tk.StringVar()reg = root.register(callback) entry = tk.Entry(root, textvariable=text, width=30, validate="key", validatecommand=(reg, '%P'))entry.pack(padx=10, pady=10, expand=True)root.mainloop()登录窗口示例import tkinter as tkfrom tkinter.messagebox import showinforoot = tk.Tk()root.geometry('300x200+200+200')root.title('登录窗口演示')email = tk.StringVar()password = tk.StringVar()def login_clicked(): msg = f'电子邮件:{email.get()}\n 密码:{password.get()}' showinfo(title='登录信息', message=msg)email_label = tk.Label(root, text="电子邮件:")email_label.pack(pady=10)email_entry = tk.Entry(root, textvariable=email, width=30)email_entry.pack()email_entry.focus()password_label = tk.Label(root, text="密码:")password_label.pack()password_entry = tk.Entry(root, textvariable=password, width=30, show="*")password_entry.pack()login_button = tk.Button(root, text="登录", command=login_clicked, width=30)login_button.pack(pady=10)root.mainloop()