今天我们将利用 tkinter
库制作以下的登录界面, 可以实现登录,并可以实现注册和登录,这里为了简单起见,使用 json
文件保存读取用户账号和密码
代码已经上传到了 GitHub,欢迎 ⭐️,另外使用PyQt制作了一个类似的项目,见CSDN
创建根窗口
首先,我们需要建立一个根窗口,控制其不能够缩放并设置其标题,调用mainloop
方法来控制
from tkinter import *
window = Tk() # 建立根目录
window.title("Welcome") # 设置标题
window.geometry("500x400") # 设置窗口的大小
window.resizable(width=False, height=False) # 设置窗口不能够缩放
window.mainloop()
到此,我们运行一下,便可以得到如下的效果

添加图片
然后我们来设置一下首页中图片,利用PIL
和Canvas
中的create_image
方法加上控制一下位置,我们便可以实现,代码如下:
from PIL import Image, ImageTk
# 首页的图片
image = Image.open("./welcome.jpg") # 打开图片,保存在image对象中
img = ImageTk.PhotoImage(image) # 转化成tkinter中的图片对象
c = Canvas(window, width=500, height=200) # 创建画布对象
c.create_image(250, 0, image=img, anchor=N) # 添加图片
c.pack() # 将图片打包到首页上
就这样就,我们实现了如下的效果
添加文字信息
接下来我们就需要在上面添加文字信息,在tkinter
中提供了一个类Label
可以为我们做这件事,常见用法如下
Label(master[, text, font,textvariabel, wraplength, padx, pady, ...])
master
是要显示的窗口text
为要显示的文字font
为要显示的文字的字体,可以控制字体的大小textvariable
文字变量,以文字变量的值显示wraplength
换行的长度padx, pady
内容区与边界的距离
知道了这些之后,我们便可以在之前的窗口上添加这些文字了,然后使用place
将这些控件摆放在对应的位置
username_label = Label(window, font='Monaco 12', text="username:")
passwd_label = Label(window, font='Monaco 12', text='password:')
username_label.place(x=40, y=220) # 摆放位置
passwd_label.place(x=40, y=260)
welcome = Label(window, font="monaco 12", text='Welcome here to learn python !')
welcome.place(x=250, y=320, anchor=N)
创建输入框
那么输入框如何解决呢,在tkinter
中提供了Entry
控件可以获取用户的输入,用法见下:
Entry(master, [textvariable, width, show, font, padx, pady, ...])
master
是要显示的窗口show
为输入显示的字符,默认为None,即显示原字符font
为要显示的文字的字体,可以控制字体的大小textvariable
文字变量,输入的值可以保存在该变量之中width
输入框的宽度padx, pady
内容区与边界的距离
定义相关变量
在tkinter
中有定义好的变量类型对象 – BooleanVar
, DoubleVar
, IntVar
, StringVar
分别可以保存布尔类型,浮点数类型,整数类型以及字符串类型的变量,使用的时候,我们可以使用其中的set
方法来赋值,使用get
方法来获取其中的值,使用这些变量通常会在交互中需要改变某个变量的值,比如输入,选择等
知道了以上这些之后,我们便可以用来实现处理用户输入了,代码如下:
# 输入框
username = StringVar()
passwd = StringVar()
# 以下将用户输入的内容赋值给我们的变量
username_entry = Entry(window, font='Monaco 10', width=20, textvariable=username)
passwd_entry = Entry(window, font='Monaco 10', width=20, textvariable=passwd, show='*')
username_entry.place