【本文章已在 2022/9/25 重制】
Python Tkinter 超详细免费教程链接https://blog.csdn.net/weixin_62651706/category_11600888.html?spm=1001.2014.3001.5482这篇博客介绍了如何用Python Tkinter模块编写一个界面化的登录界面程序,在博客下面有完整的源码,源码中有超详细的注释,帮助大家理解代码(最后还有附件可以免费下载)
【注:下载文件100%可以运行,因为下载文件中包含打包了的Python程序(exe文件)!】
【效果图】
【用户登录界面】
【用户注册界面】
【提示界面】(展示一部分)
【登录成功提示】
【源代码】
【下方有附件可免费下载】
import random
import tkinter
import tkinter.messagebox
import tkinter.ttk
__author__ = '小康2022'
# NOTE: 2022/9/25 重制
root = tkinter.Tk() # 创建主窗口
root.title('主窗口') # 主窗口标题
root.geometry('0x0') # 设置主窗口大小为 0
root.overrideredirect(True) # 暂时隐藏主窗口外框
login = tkinter.Toplevel() # 创建登录窗口
login.title('用户登录') # 登录窗口的标题
login.geometry('250x200+500+250') # 登录窗口的大小及位置
login.resizable(False, False) # 设置登录窗口的大小不可改变
login.protocol('WM_DELETE_WINDOW', root.quit) # 关闭Toplevel的同时,关闭主窗口
image = tkinter.PhotoImage(file='res/bg%s.png' % random.randint(0, 6)) # 随机选取一个图片
tkinter.Label(login, image=image, bd=0, text='登录窗口\n由Tkinter设计', compound='center', font=('华文行楷', 25), fg='yellow').place(width=250, height=100) # 创建一个图片标签
tkinter.Label(login, text='用户').place(width=50, height=25, x=20, y=105) # “用户”文字标签
tkinter.Label(login, text='密码').place(width=50, height=25, x=20, y=135) # “密码”文字标签
(account := tkinter.ttk.Entry(login)).place(width=160, height=25, x=70, y=105) # 用户名输入框
(password := tkinter.ttk.Entry(login, show='●')).place(width=160, height=25, x=70, y=135) # 密码输入框
tkinter.ttk.Button(login, text='注册', command=lambda: toplevel_register()).place(width=100, height=28, x=20, y=166) # 注册按钮
tkinter.ttk.Button(login, text='登录', command=lambda: test_for_password()).place(width=100, height=28, x=130, y=166) # 登录按钮
def load_data():
with open('res/data.csv', 'r') as infile: # 打开文件
return map(str.strip, infile.readlines()) # 返回处理后数据
def toplevel_register():
register = tkinter.Toplevel(login) # 创建注册窗口
register.title('用户注册') # 注册窗口标题
register.geometry('250x125+500+300') # 注册窗口大小及位置
register.resizable(False, False) # 设定注册窗口大小不可改变
tkinter.Label(register, text='用户名').place(width=50, height=25, x=25, y=5) # “用户名”文字标签
tkinter.Label(register, text='新密码').place(width=50, height=25, x=25, y=35) # “新密码”文字标签
tkinter.Label(register, text='新密码').place(width=50, height=25, x=25, y=65) # “重复新密码”文字标签
(account := tkinter.ttk.Entry(register)).place(width=150, height=25, x=80, y=5) # 新用户名输入框
(password := tkinter.ttk.Entry(register, show='●')).place(width=150, height=25, x=80, y=35) # 新密码输入框
(password_ := tkinter.ttk.Entry(register, show='●')).place(width=150, height=25, x=80, y=65) # 重复密码输入框
tkinter.ttk.Button(register, text='注册', command=lambda: register_account()).place(width=100, height=27, x=20, y=94) # 注册按钮
tkinter.ttk.Button(register, text='取消', command=register.destroy).place(width=100, height=27, x=130, y=94) # 登录按钮
def register_account():
if not (account.get() and password.get()): # 用户名或密码为空
tkinter.messagebox.showwarning('注册提示', '用户名或密码不可为空!')
elif password.get() != password_.get(): # 两次密码不一致
tkinter.messagebox.showwarning('注册提示', '两次密码不一致!')
elif account.get() in [line.split(',')[0] for line in load_data()]: # 用户名已被注册
tkinter.messagebox.showerror('注册提示', '用户名已被注册!')
else: # 注册成功
with open('res/data.csv', 'a') as infile: # 打开文件
infile.write('%s,%s\n' %(account.get(), password.get())) # 写入信息
tkinter.messagebox.showinfo('注册提示', '注册成功!')
register.destroy() # 关闭注册窗口
def test_for_password(count: list[int] = [0]):
if not (account.get() and password.get()): # 用户名或密码为空
tkinter.messagebox.showwarning('登录提示', '用户名或密码不可为空!')
elif account.get()+','+password.get() in load_data(): # 登录成功
tkinter.messagebox.showinfo('登录提示', '登录成功!')
login.destroy() # 摧毁登录窗口
root.overrideredirect(False) # 显示主窗口外框
root.geometry('960x540') # 重新设置主窗口大小及位置
else: # 用户名或密码错误
count[0] += 1 # 错误计数
if count[0] < 5: # 错误适量
tkinter.messagebox.showerror('登录提示', '用户名或密码错误!')
else: # 错误过多
tkinter.messagebox.showerror('登录提示', '已连续错误5次!\n请稍后再试!')
root.quit() # 退出窗口
root.mainloop() # 窗口循环
这里有个小技巧,因为主窗口只能有一个,而且主窗口一旦关闭,所有子窗口都将随之关闭,所以我这里的主窗口只能选择为登录后窗口,但是程序一旦打开主窗口就会一直保持打开状态,这不是我们想要的,我们想要的是登录成功后再关闭登录界面(一个子窗口),然后再让登录后的那个窗口打开,所以,这里用的方法是先让登录后窗口隐藏(是打开的,只是我们看不见)
【 原创不易,大家都看到这里了,不如点个赞呗!】
完整程序下载链接【蓝奏云】登录界面.zip
【下期内容:Python Tkinter编写简易计算器】