13-Tkinter 组件-Entry单行输入控件

Entry单行输入控件

输入控件;用于显示简单的文本内容.可以用get函数获取到文本框中输入的信息

Python Tkinter 文本框用来让用户输入一行文本字符串。

  • 如果需要输入多行文本,可以使用 Text 组件。
  • 如果需要显示一行或多行文本且不允许用户修改,你可以使用 Label 组件。

语法

语法格式如下:

w = Entry( master, option, ...)
  • master: 按钮的父容器。
  • options: 可选项,即该按钮的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。
参数描述
bg输入框背景颜色
fg前景文字颜色。值为颜色或为颜色代码,如:‘red’,‘#ff0000’
bd边框的大小,默认为 2 个像素
cursor光标的形状设定,如arrow, circle, cross, plus 等
font文本字体
exportselection默认情况下,你如果在输入框中选中文本,默认会复制到粘贴板,如果要忽略这个功能刻工艺设置 exportselection=0。
highlightcolor文本框高亮边框颜色,当文本框获取焦点时显示
justify显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT, RIGHT, CENTER
relief边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。
selectbackground选中文字的背景颜色
selectborderwidth选中文字的背景边框宽度
selectforeground选中文字的颜色
show指定文本框内容显示为字符,值随意,满足字符即可。如密码可以将值设为 show=“*”
state默认为 state=NORMAL, 文框状态,分为只读和可写,值为:normal/disabled DISABLED只显示的内容可以选择与拷贝,不可修改。
textvariable文本框的值,是一个StringVar()对象。还可以有小数DoubleVar、布尔BooleanVar、数字IntVar。关联的tkinter变量,一般是StringVar类型。如果该变量改变,则输入控件中的内容也会更新。
width文本框宽度
xscrollcommand / yscrollcommand设置水平、垂直方向滚动条,一般在用户输入的文本框内容宽度大于文本框显示的宽度时使用。将滚动条与输入控件关联起来,处理滚动条动作。滚动条只能是水平滚动条。
validate定义在什么条件下触发验证输入内容,做内容校验时用到:
focus:获得或者失去输入焦点时候
focuin:仅在获得输入焦点的时候
focusout: 失去输入焦点的时候
key: 改变内容的时候
ALL:以上全部情况
该属性定义的是何时启动输入验证,而验证输入内容的回调函数由validatecommand或者invalidcommand定义
validatecommand / vcmd定义一个函数去验证与检查输入内容。如果输入的内容符合要求,该函数返回True,否则返回False。此属性在validate不空的时候有效。
takefocus定义是否可以使用Tab键移动输入焦点到输入控件。

方法

下表为文本框组件常用的方法:

序号方法 & 描述
delete(first, last=None)删除文本框里直接位置值 例子:
text.delete(10)删除索引值为10的值;
text.delete(10, 20)删除索引值从10到20之前的值
text.delete(0, END) # 删除所有值`
get()获取文件框的值
icursor(index)将光标移动到指定索引位置,只有当文框获取焦点后成立
index(index)返回指定的索引值
insert(index, s)向文本框中插入值,index:插入位置,s:插入值
select_adjust(index)选中指定索引和光标所在位置之前的值
select_clear()清空文本框
select_from(index)设置光标的位置,通过索引值 index 来设置
select_present()如果有选中,返回 true,否则返回 false。
select_range(start, end)选中指定索引位置的值,start(包含) 为开始位置,end(不包含) 为结束位置start必须比end小
select_to(index)选中指定索引与光标之间的值
xview(index)该方法在文本框链接到水平滚动条上很有用。
xview_scroll(number, what)用于水平滚动文本框。 what 参数可以是 UNITS, 按字符宽度滚动,或者可以是 PAGES, 按文本框组件块滚动。 number 参数,正数为由左到右滚动,负数为由右到左滚动。

实例

实例中点击按钮会显示一个信息:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
from Tkinter import *
 
top = Tk()
L1 = Label(top, text="网站名")
L1.pack( side = LEFT)
E1 = Entry(top, bd =5)
E1.pack(side = RIGHT)
 
top.mainloop()

如何通过快捷键选择(聚焦)文本框?

答:bind_all 绑定快捷键,foucus 选择文本框。

例:

from tkinter import  *
# Python 2.x 版本使用 Tkinter
# from Tkinter import  *
root = Tk()
def eventhandler(event):
    entry.focus()
entry=Entry(root,bd=4)
entry.bind_all('<Control-f>', eventhandler) # 绑定快捷键Ctrl-f
entry.pack()
root.mainloop()

设置快捷键的方法好找,设置选择的方法我在百度上找不到,就去外网查了一下找到了,写出来分享一下。

具体可以自己去外网搜:how to set focus in tkinter entr box

这个函数可以检测输入的字符串是否是整形数或者是浮点数。不过只能检测正数字,不能检测负数。我们还可以在修改完善一下,就是首先判断输入的第一个字符是不是“-”,如果是,就使用拷贝后面的字符来检测。只需在int_float 函数开始的地方增加检测输入的字符串是不是等于’-’即可:

    if value=='-':
        return True

还有一个问题就是不能清空输入框,必须保留至少一个数字。这是因为回调函数没有处理输入框种的内容为空的情况。如果删除了所有的字符,传入回调函数的值是’’,这种情况下判断函数返回的是False,因为不满足任何一个条件。所以需要增加处理输入框为空的情况:

if value=='':
        return True

输入框内容校验

Tkinter 验证依赖于可用于任何输入小部件(例如 Entry 小部件)的三个选项:

  • validate:指定哪种类型的事件将触发验证。
  • validatecommand:检查数据是否有效
  • invalidcommand:当数据无效时执行。 换句话说,如果 validate 命令返回 False,它将执行。
validate命令

vaidate是定义在何种条件下触发输入验证:

字符含义
focus获得或者失去输入焦点时候
focusin每当小部件获得焦点时进行验证
focusout每当小部件失去输入焦点的时候
key每当任何击键更改小部件的内容时进行验证
ALL在上述所有情况下验证聚焦、聚焦和关键
none关闭验证。 默认设置
validatecommand
  • validatecommand 是一个元组,包含:

    • 对 Tcl/tk 函数的引用。
    • 零个或多个替换代码指定触发要传递给函数的事件的信息。

    要获取对 Tck/tk 函数的引用,请将可调用对象传递给 widget.register() 方法。 它返回一个可以与 validate 命令一起使用的字符串。

下表显示了可用于元组的替换代码:

参数含义
%d操作代码:0 表示尝试删除,1 表示尝试插入,或 -1 如果调用回调以聚焦、聚焦或更改“文本变量”
%i当用户试图插入或删除文本时,此参数将是插入或删除开始的索引。 如果回调是由于聚焦、聚焦或更改“textvariable”,则参数将为“-1”
%P当前输入框中的文本
%s更改前Entry中的文本
%S插入或者删除的字符
%v小部件的validate 选项的当前值
%V此回调的原因:如果textvariable 被更改,则为 'focusin''focusout''key''forced' 之一
%W小部件的名称

以下示例构造一个使用 self.validate() 方法和 %P 替换代码的 validatecommand:

vcmd = (self.register(self.validate), '%P')
invalidcommand

与 validatecommand 一样,invalidcommand 也需要使用 widget.register() 方法和替换代码。

以下示例返回一个元组,您可以将其传递给 invalidcommand 选项:

ivcmd = (self.root.register(self.on_invalid),)
使用介绍
  • 同时设定了validatecommandinvalidatecommand,首先执行的是validatecommand

    • 返回值是True,不会执行invalidatecommand定义的回调函数。
    • 返回值是False,会调用invalidatecommand定义的回调函数。
    • 需要注意的是,如果验证触发条件是key或者all,不能同时使用validatecommandinvalidatecommand,否则会无法输入任何内容。
  • invalidatecommand是不能单独使用的。必须有validatecommandinvalidatecommand才会起作用。只有invalidatecommand是不能完成输入验证的,因为根本不会给触发。

下面的例子是检查输入的都要是数字,否则不允许输入。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
def check_digit(content):
    if content.isdigit() or content == "":# 判断是否十进制
        return True
    else:
        return False
entry_validate=root.register(check_digit)
b1 = tk.Entry(root,width=20,validate='key',vcmd=(entry_validate,'%P'))
b1.pack()

root.mainloop()

上面的例子要求输入必须是整数,下面例子是一个要输入浮点数,替换掉isdigit()函数,用自定义的检查函数即可。

def int_float(value):
  
	try:
        x=int(value)
    except ValueError:
        try:
            y = float(value)
        except ValueError:
            return False
        else:
            return True
    else:
        return True

下面将创建一个包含电子邮件输入的表单。 如果输入了无效的电子邮件地址,它将显示一条错误消息并将电子邮件输入的文本颜色更改为红色。 当焦点移出条目时,我们将触发验证事件。

# coding = utf-8
# File date: Hi_2022/9/28 16:53
# File_name: demo.py
import tkinter as tk
from tkinter import ttk
import re


class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('Tkinter Validation Demo')
        self.create_widgets()

    def create_widgets(self):
        self.columnconfigure(0, weight=1)
        self.columnconfigure(1, weight=3)
        self.columnconfigure(2, weight=1)
        # label
        ttk.Label(text='Email:').grid(row=0, column=0, padx=5, pady=5)
        # email entry
        vcmd = (self.register(self.validate), '%P')
        ivcmd = (self.register(self.on_invalid),)
        self.email_entry = ttk.Entry(self, width=50)
        self.email_entry.config(validate='focusout', validatecommand=vcmd, invalidcommand=ivcmd)
        self.email_entry.grid(row=0, column=1, columnspan=2, padx=5)
        self.label_error = ttk.Label(self, foreground='red')
        self.label_error.grid(row=1, column=1, sticky=tk.W, padx=5)
        # button
        self.send_button = ttk.Button(text='Send').grid(row=0, column=4, padx=5)

    def show_message(self, error='', color='black'):
        self.label_error['text'] = error
        self.email_entry['foreground'] = color

    def validate(self, value):
        """
        Validat the email entry
        :param value:
        :return:
        """
        pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
        if re.fullmatch(pattern, value) is None:
            return False
        self.show_message()
        return True

    def on_invalid(self):
        """Show the error message if the data is not valid"""
        self.show_message('Please enter a valid email', 'red')


if __name__ == '__main__':
    app = App()
    app.mainloop()

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 你可以使用 `get()` 方法来获取 `Entry` 中输入的字符串。以下是一个简单的示例: ```python from tkinter import * root = Tk() # 创建一个 Entry 控件 entry = Entry(root) entry.pack() # 定义一个函数,用于获取 Entry输入的字符串 def get_entry(): value = entry.get() print(value) # 创建一个 Button 控件,当点击时调用 get_entry 函数 button = Button(root, text="获取输入", command=get_entry) button.pack() root.mainloop() ``` 在上面的示例中,我们创建了一个 `Entry` 控件,然后定义了一个名为 `get_entry` 的函数来获取 `Entry` 中输入的字符串。我们还创建了一个 `Button` 控件,并将其与 `get_entry` 函数绑定,这样当用户点击按钮时就会调用 `get_entry` 函数。 ### 回答2: 在使用PythonTkinter创建图形界面时,可以使用Entry控件创建文本框,然后通过get()方法获取文本框中输入的字符串。 首先,需要导入Tkinter模块。 ```python from tkinter import * ``` 然后,创建一个窗口对象。可以使用Tk()函数来创建窗口,并设置标题。 ```python window = Tk() window.title("获取Entry中的字符串") ``` 接下来,可以使用Entry控件创建文本框,并设置宽度。 ```python entry = Entry(window, width=30) entry.pack() ``` 在需要获取文本框中的字符串时,可以使用get()方法。 ```python def get_text(): text = entry.get() print("输入的字符串是:" + text) button = Button(window, text="获取字符串", command=get_text) button.pack() ``` 最后,调用主事件循环以启动窗口。 ```python window.mainloop() ``` 当用户点击“获取字符串”按钮时,会触发get_text()函数,该函数通过entry.get()方法获取文本框中的字符串,并输出到控制台。 以上就是在PythonTkinter中获取Entry输入字符串的方法,希望对你有所帮助。 ### 回答3: 在Pythontkinter库中,可以使用Entry组件来创建一个单行的文本输入框。要获取Entry输入的字符串,可以通过以下步骤进行: 1. 导入tkinter库: ```python import tkinter as tk ``` 2. 创建一个窗口,并在窗口中添加Entry组件: ```python window = tk.Tk() entry = tk.Entry(window) entry.pack() ``` 3. 创建一个函数来获取Entry中的输入字符串,可以通过`get()`方法实现: ```python def get_input(): input_str = entry.get() print(input_str) ``` 4. 创建一个按钮,通过点击按钮来触发获取输入字符串的函数: ```python button = tk.Button(window, text="获取输入", command=get_input) button.pack() ``` 5. 运行窗口的主事件循环来显示窗口: ```python window.mainloop() ``` 通过以上步骤,当用户在Entry组件输入字符串后,点击"获取输入"按钮,就可以在控制台输出该字符串。可以根据实际需求调整获取输入字符串后的处理方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值