Tkinter单行文本输入Entry小部件|先生的Tkinter教程(3)

零、前文回顾

一、创建一个文本输入部件

上一篇文章中,我们介绍了Tkinter中按钮小部件Button()的使用。除了按钮小部件之外,单行文本输入小部件也是图形界面程序中使用较多的小部件,今天,我们就来学习一下Tkinter单行文本输入小部件的使用。

在Tkinter中,单行文本输入通过实例化一个Entry()类来实现,和Button()按钮一样,它也需要调用pack()方法进行打包:

# 州的先生 https://zmister.com
import tkinter as tk

class EntryApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.entry = tk.Entry()
        self.entry.pack()

if __name__ == "__main__":
    app = EntryApp()
    app.mainloop()

运行上述代码,我们将会得到一个含有简单的单行文本输入框的图形界面程序。如下图所示:

二、组合按钮和文本输入

结合我们上一篇使用到的Button()按钮小部件,我们来创建一个组合了按钮和输入框的图像界面程序:

# coding:utf-8
# 州的先生 https://zmister.com
import tkinter as tk

class EntryApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.wm_title('州的先生Tkinter教程')
        self.entry1 = tk.Entry()
        self.entry2 = tk.Entry()
        self.btn1 = tk.Button(text='提交')
        self.btn2 = tk.Button(text='重置')

        self.entry1.pack()
        self.entry2.pack()
        self.btn1.pack()
        self.btn2.pack()

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

在这里,我们创建了两个文本输入框和两个按钮,运行代码,我们会得到如下图所示的图像界面程序:

隐藏文本输入信息

看到上面的图像界面,大家肯定可以猜到我们这是在创建一个登陆窗口的图像界面,第一个文本输入框为用户名输入框,第二个文本输入框问密码输入框。既然有密码输入框,自然在输入的时候不能完全将密码显示出来,一般情况下,都是使用星号*来代替真实的输入值。在Tkinter中,我们通过Entry()类的show属性选项来设置文本输入框显示出来的值:

tk.Entry(show='*')

这样,在这个文本输入框中输入的内容都会显示为*,我们将上面的代码修改一下,加入隐藏文本信息的设置:

# coding:utf-8
# 州的先生 https://zmister.com
import tkinter as tk

class EntryApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.wm_title('州的先生Tkinter教程')
        self.entry1 = tk.Entry()
        self.entry2 = tk.Entry(show='*')
        self.btn1 = tk.Button(text='提交')
        self.btn2 = tk.Button(text='重置')

        self.entry1.pack()
        self.entry2.pack()
        self.btn1.pack()
        self.btn2.pack()

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

运行上述代码,在生成的图像界面程序中第二个文本输入框的内容显示的将永远都是星号*,如下图所示:

获取文本输入框的值

我们在Entry()文本输入框中输入内容之后,如果需要对输入的内容进行利用、验证或判断,那么则必须需要获取到文本输入框中的值,那么如何在图像界面中获取到这些值呢?

使用实例化后的Entry()类的get()方法就可以获取到当前文本输入框中的值。下面我们来演示一下:

# coding:utf-8
# 获取文本输入框的值
# 州的先生 https://zmister.com
import tkinter as tk

class EntryApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.wm_title('州的先生Tkinter教程')
        self.entry1 = tk.Entry()
        self.entry2 = tk.Entry(show='*')
        self.btn1 = tk.Button(text='提交',command=self.get_entry_value)
        self.btn2 = tk.Button(text='重置')

        self.entry1.pack()
        self.entry2.pack()
        self.btn1.pack()
        self.btn2.pack()

    # 打印文本输入框的值
    def get_entry_value(self):
        e1 = self.entry1.get()
        e2 = self.entry2.get()
        print("第一个输入框值为:",e1)
        print("第二个输入框的值为:",e2)

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

在这里,我们新定义了一个EntryApp()的方法get_entry_value()用于将文本输入框的值打印出来,在方法中我们使用Entry()的get()方法获取到文本输入框的当前值,然后打印到控制台中,最后将其绑定在按钮btn1上。运行上述代码,点击“提交”按钮,我们将在控制台中看到两个文本输入框的值。如下图所示:

控制删除文本框的值

除了获取文本框中的值,有时候我们在文本输入框中输错了信息,还得删除这些值,如果输入框少,那么直接backpace键删除就可以了,但是如果有很多个输入框,一个一个删除就太麻烦了。这时候,我们就需要一个一键重置的功能,来对输入框中的信息进行删除。

Entry()文本输入小部件中有一个delete()方法可供我们对其中的文本进行删除。我们来查看一下delete()方法的源码:

    def delete(self, first, last=None):
        """Delete text from FIRST to LAST (not included)."""
        self.tk.call(self._w, 'delete', first, last)

可以发现,delete()方法接收两个参数,first表示需要删除文本的起始位置,last表示需要删除文本的结束位置。基于此,我们为之前的表单添加一键删除重置的功能:

# coding:utf-8
# 获取文本输入框的值
# 州的先生 https://zmister.com
import tkinter as tk

class EntryApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.wm_title('州的先生Tkinter教程')
        self.entry1 = tk.Entry()
        self.entry2 = tk.Entry(show='*')
        self.btn1 = tk.Button(text='提交', command=self.get_entry_value)
        self.btn2 = tk.Button(text='重置', command=self.clear_entry_value)

        self.entry1.pack()
        self.entry2.pack()
        self.btn1.pack()
        self.btn2.pack()

    # 打印文本输入框的值
    def get_entry_value(self):
        e1 = self.entry1.get()
        e2 = self.entry2.get()
        print("第一个输入框值为:", e1)
        print("第二个输入框的值为:", e2)

    # 清空文本输入框的值
    def clear_entry_value(self):
        self.entry1.delete(0,tk.END)
        self.entry2.delete(0,tk.END)
        self.entry1.focus_set() # 对第一个文本输入框设置光标焦点


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

运行上述代码,可以发现,之前创建的“重置”按钮已经可用了,当我们点击“重置”按钮时,两个文本输入框中的文本将会被清空,如下图所示:

三、文本输入框的更多用法

在文本框中写入值

Entry()文本输入框小部件除了get()方法用于获取输入框的值,delete()方法用于删除输入框的值外,还有insert()方法用于在输入框中插入值,其使用方法与delete()方法类似,下面我们来实际演示一下:

# coding:utf-8
# 获取文本输入框的值
# 州的先生 https://zmister.com
import tkinter as tk


class EntryApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.wm_title('州的先生Tkinter教程')
        self.entry1 = tk.Entry()
        self.entry2 = tk.Entry(show='*')
        self.btn1 = tk.Button(text='提交', command=self.get_entry_value)
        self.btn2 = tk.Button(text='重置', command=self.clear_entry_value)
        self.btn3 = tk.Button(text='默认值', command=self.insert_entry_value)

        self.entry1.pack()
        self.entry2.pack()
        self.btn1.pack()
        self.btn2.pack()
        self.btn3.pack()

    # 打印文本输入框的值
    def get_entry_value(self):
        e1 = self.entry1.get()
        e2 = self.entry2.get()
        print("第一个输入框值为:", e1)
        print("第二个输入框的值为:", e2)

    # 清空文本输入框的值
    def clear_entry_value(self):
        self.entry1.delete(0,tk.END)
        self.entry2.delete(0,tk.END)
        self.entry1.focus_set() # 对第一个文本输入框设置光标焦点

    # 填入默认值
    def insert_entry_value(self):
        self.entry1.insert(0,"州的先生")
        self.entry2.insert(0,"zmister.com")

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

在这里,我们新添加了一个按钮“默认值”用于为文本输入框填充默认值,然后新建了一个insert_entry_value()方法用于向文本输入框中填充值。运行上述代码,当我们点击“默认值”按钮时,文本输入框内会被填入我们预设的文本,如下图所示:

四、最后

以上就是本篇对于Tkinter的小部件Entry()的介绍了,文章源码已经上传到百度网盘,如有疑问欢迎交流讨论。

猜你也喜欢

发表评论

邮箱地址不会被公开。