项目介绍

使用tkinter开发的一款登录和注册图形化界面

使用tkinter开发的一款登录和注册图形化界面,并且使用 ttkbootstrap 进行界面美化。

项目以学校选课系统为参考,将登陆身份设置为:管理员、教师、学生。登录时可根据登录的身份自动打开对应的界面【空白界面暂未开发】。

项目中用户的信息全部保存在 sqlite 数据库中,数据表有:users表保存账号密码信息,remember_psw表保存上次登录信息。

该项目还有其他小功能:左上角图标根据内容改变、根据输入有误信息准确提示;更多功能欢迎体验。

项目管理员手机号为:admin

项目管理员密码为:admin

登录功能

登录界面包含:输入手机号、密码,记住密码选项框组件,输入正确信息后登录成功!输入错误信息及未输入完整信息均有提示框。

登录界面展示

登录主要功能

  • 输入密码不显示明文,以 * 代替
  • 账号密码不正确或未输入,有不同弹窗提示
  • 记住密码功能,勾选后下次直接登录
  • 可以根据登录的身份不同,打开对应的界面【空白界面暂未开发】

登录部分源码

登录界面部分代码展示:

    def login_window(self, frame=None):
# 用户名输入框
username_label = Label(frame, text="手机号:")
username_label.grid(row=1, column=1, padx=5, pady=20)
self.login_phone = tk.StringVar()
username_entry = Entry(frame, bootstyle=INFO, textvariable=self.login_phone, width=30)
username_entry.grid(row=1, column=2, padx=5, pady=10)
# 密码输入框
psw_label = Label(frame, text="密 码:")
psw_label.grid(row=2, column=1, padx=5, pady=10)
self.login_psw = tk.StringVar()
psw_entry = Entry(frame, bootstyle=INFO, textvariable=self.login_psw, show="*", width=30)
psw_entry.grid(row=2, column=2, padx=5, pady=10)
# 记住密码选项
self.remember_psw = tk.IntVar()
pwd_check_button = Checkbutton(frame, text="记住密码", variable=self.remember_psw)
pwd_check_button.grid(row=3, column=1, padx=5, pady=5, columnspan=2, sticky="w")
# 登录按钮
login_button = Button(frame, text="登 录", bootstyle=PRIMARY, width=40, command=self.login)
login_button.grid(row=4, column=1, padx=5, pady=10, columnspan=2)
# 查看是否记住密码
remember_select_sql = """SELECT phone,password,is_remember FROM remember_psw WHERE id=1;"""
is_remember = self.execute_sql(remember_select_sql)
if is_remember:
if is_remember[0][2] == "1":
self.login_phone.set(is_remember[0][0])
self.login_psw.set(is_remember[0][1])
self.remember_psw.set(int(is_remember[0][2]))

登录功能部分代码展示:

    def login(self):
phone = self.login_phone.get()
password = self.login_psw.get()
remember = self.remember_psw.get()
if phone and password:
md5_password = self.encryption(password)
select_sql = f"""select 1 from users where phone='{phone}' AND password_md5='{md5_password}';"""
if self.execute_sql(select_sql):
create_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 更新记住密码操作
update_sql = f"""UPDATE remember_psw SET phone='{phone}',password='{password}',is_remember='{remember}',create_time='{create_time}' WHERE id=1;"""
self.execute_sql(update_sql)
# showinfo(title="登录", message="登录成功!")
self.register_login.destroy()
# 根据登录的身份打开不同的界面
select_id_sql = f"""SELECT name,identity FROM users WHERE phone='{phone}';"""
select_id_result = self.execute_sql(select_id_sql)
if select_id_result[0][1] == "管理员":
self.admin_window()
elif select_id_result[0][1] == "教师":
self.teacher_window()
elif select_id_result[0][1] == "学生":
self.student_window()
else:
showerror(title="失败", message="账号密码输入错误!")
else:
showerror(title="失败", message="账号密码输入有误!")

注册功能

注册界面主要包括:输入用户名、手机号、密码、身份下拉框组件。输入信息有误均有不同弹窗提示输入错误信息及未输入完整信息均有提示框。

注册界面展示

注册主要功能

  • 信息未填写完整,有弹窗提示
  • 手机号格式不正确,有弹窗提示
  • 注册密码以md5格式保存在数据库
  • 密码至少6位数且由数字、字母组成
  • 身份必须选择一项,否则有弹窗提示
  • 注册的手机号已存在,有弹窗提示
  • 注册成功有弹窗提示
  • 注册成功后,自动清空注册内容

注册部分源码

注册界面部分代码展示:

    def register_window(self, frame=None):
padx = 5
pady = 5
# 用户名输入框
username_label = Label(frame, text="用户名:")
username_label.grid(row=1, column=1, padx=padx, pady=pady)
self.register_username = tk.StringVar()
self.register_username_entry = Entry(frame, bootstyle=INFO, textvariable=self.register_username, width=30)
self.register_username_entry.grid(row=1, column=2, padx=padx, pady=pady)
# 手机号输入框
username_label = Label(frame, text="手机号:")
username_label.grid(row=2, column=1, padx=padx, pady=pady)
self.register_pone = tk.StringVar()
self.register_phone_entry = Entry(frame, bootstyle=INFO, textvariable=self.register_pone, width=30)
self.register_phone_entry.grid(row=2, column=2, padx=padx, pady=pady)
# 密码输入框
psw_label = Label(frame, text="密 码:")
psw_label.grid(row=3, column=1, padx=padx, pady=pady)
self.register_psw = tk.StringVar()
self.register_psw_entry = Entry(frame, bootstyle=INFO, textvariable=self.register_psw, show="*", width=30)
self.register_psw_entry.grid(row=3, column=2, padx=padx, pady=pady)
# 身份
psw_label = Label(frame, text="身 份:")
psw_label.grid(row=4, column=1, padx=padx, pady=pady)
self.register_id = tk.StringVar()
self.register_combox = Combobox(frame, bootstyle=PRIMARY, textvariable=self.register_id, state="readonly",
width=28)
self.register_combox["value"] = ("下拉选择身份:", "教师", "学生")
self.register_combox.current(0)
self.register_combox.grid(row=4, column=2, padx=padx, pady=pady)
# 登录按钮
login_button = Button(frame, text="注 册", bootstyle=PRIMARY, width=40, command=self.register)
login_button.grid(row=5, column=1, padx=padx, pady=pady, columnspan=2)

注册功能部分代码展示:

 def register(self):
user_name = self.register_username.get()
phone = self.register_pone.get()
password = self.register_psw.get()
identity = self.register_id.get()
if user_name and phone and password and (identity in ("教师", "学生")):
if not re.match(r"^1[356789]\d{9}$", phone):
showerror(title="失败", message="手机号填写有误!")
elif not (password.isalnum() and len(password) >= 6):
showerror(title="失败", message="密码至少6位且由数字、字母组成!")
else:
# 判断手机号是否存在
select_sql = f"""select 1 from users where phone='{phone}' LIMIT 1;"""
if self.execute_sql(select_sql):
# 手机号已注册
showerror(title="失败", message="该手机号已注册!")
else:
md5_password = self.encryption(password)
create_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
insert_users_sql = f"""
INSERT INTO users (name,phone,password,password_md5,identity,create_time) VALUES ('{user_name}','{phone}','{password}','{md5_password}','{identity}','{create_time}');
"""
self.execute_sql(insert_users_sql)
insert_remember_psw_sql = f"""
INSERT INTO remember_psw (phone,password,is_remember,create_time) VALUES ('{phone}','{password}','0','{create_time}');
"""
self.execute_sql(insert_remember_psw_sql)
showinfo(title="注册", message="注册成功!")
self.register_username_entry.delete(0, "end")
self.register_phone_entry.delete(0, "end")
self.register_psw_entry.delete(0, "end")
self.register_combox.current(0)
else:
showerror(title="失败", message="信息未填写完整!")

源码地址

链接:https://pan.baidu.com/s/1hn9sj4YLieyMgp6RlyLEOA?pwd=cebp
提取码:cebp

使用tkinter开发的一款登录和注册图形化界面的更多相关文章

  1. windows API 开发飞机订票系统 图形化界面 (一)

    去年数据结构课程设计的作品,c语言实现,图形化界面使用windows API实现. 首发在我csdn博客:http://blog.csdn.net/u013805360/article/details ...

  2. windows API 开发飞机订票系统 图形化界面 (三)

    来吧,接下来是各个功能的函数的实现代码. 首先,程序运行时加载读入账户信息和航班信息.接下来就该读取文件了. 我把账户资料和航班信息储存在了.txt文件里 那么问题就来了,挖掘机...额,不对,应该怎 ...

  3. 如何使用IDEA开发工具中右键中的Git图形化工具

    首先,你的项目一定是git服务器上面down下来的,下面来演示如何使用IntelliJ IDEA 开发中在鼠标右键中提供的一个非常方便的图形化Git管理工具: 这里使用的IDEA开发工具的版本是 In ...

  4. 如何开发自己的搜索帝国之ES图形化Kibana安装与使用

    在如何开发自己的搜索帝国之Elasticsearch中已经介绍安装好了ES,下面就Kibana对ES的查询监控作介绍,就是常提到的大数据日志处理组件ELK里的K. 什么是Kibana?现引用园友的一段 ...

  5. java实现登录的验证码和猜数字游戏_图形化界面

    实验任务四 1,出现设计思想 (1)先定义文本框.密码框和验证码框的组件 (2)定义面板和按钮的个数 (3)定义公有的虚构方法,通过对象实例化来调用 (4)利用Random类来实现生成0-9的随机数 ...

  6. python——Tkinter图形化界面及threading多线程

    Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macinto ...

  7. 家庭记账本app进度之对于登录和注册两个界面点击按钮的相互跳转

    这次主要完成了两个两个android页面之间的跳转.从登录页面点击注册就会跳转到注册页面.在注册页面点击返回登录,这样就可以返回到登录界面.主要是这样的操作.其中遇到了一个困难主要是当点击按钮的时候, ...

  8. windows API 开发飞机订票系统 图形化界面 (四)

    接下来的是录入航班.修改航班信息功能的实现: //录入航班 BOOL EntryFlight(HWND hEntryDlg){ TCHAR szDiscount[]; TCHAR szFare[],s ...

  9. windows API 开发飞机订票系统 图形化界面 (二)

    首先,用到的数据结构的定义.以及全局变量和函数的声明如下: // Flight.c : 定义应用程序的入口点. // #include "stdafx.h" //订单 typede ...

  10. java工程开发之图形化界面之(第一课)

    下面我们先上代码: package 一个事例图形小应用程序; import javax.swing.JApplet; import java.awt.Graphics; public class 绘制 ...

随机推荐

  1. Gitee + Sourcetree 配置公钥 SSH

    设置前提 安装Git Git下载 安装sourceTree sourceTree下载 gitee账号 gitee官网 Git设置公钥 1.在安装好 sourcetree 后 点击操作选择在终端中打开 ...

  2. ECharts 饼图数据放在饼图内部显示

    1.业务需求 将数据显示在饼图内部,格式化百分比显示,鼠标放上去显示具体名称和数值 原样式如下 2.业务实现 调整代码如下,核心语句已标记注释 option = { title: { text: 'R ...

  3. Netty进阶

    1.Netty问题 TCP协议都存在着黏包和半包问题,但是UDP没有 1.粘包现象 发送方分10次发送,接收方一次接受了10次发送的消息 2.半包现象 调整服务器的接受缓冲区大小(调小) 半包会导致服 ...

  4. UBUNTU18.04安装CUDA

    1.官方教程https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#ubuntu-installation 2.在h ...

  5. redis未授权访问漏洞——简单记录

    从0复现redis未授权访问漏洞 环境:centos8(ip:10.0.0.3) 安装 redis 工具:kali(10.1.1.136) 1. 介绍 Redis REmote DIctionary ...

  6. JZOJ 3469. 【NOIP2013模拟联考7】数列(sequence)

    \(\text{Solution}\) 明显的 \(\text{K-D Tree}\) 基操题 提前给出了数列,那么考虑提前建好树,省去重构 但还是要开 \(O\) \(\text{Code}\) # ...

  7. Java流程控制:用户交互Scanner、选择结构

    Java流程控制:用户交互Scanner.选择结构 用户交互Scanner Scanner类用于获取用户的输入 基本语法: Scanner s = new Scanner(System.in);s.c ...

  8. Linux命令使用时路径存在空格、特殊符号

    https://blog.csdn.net/Homewm/article/details/102935965 Linux命令使用时路径存在空格.特殊符号(如-.@等等)如何处理呢? 再如可以转义的字符 ...

  9. python collection Chainmap Counter

    chainmap是一个方便的工具类.它是使用链的方式将多个dict链在一起, 并不是真正的生成一个新的dict,从而允许程序可以这获取任意一个dict 所包含的所有key对应的value. 但是由于式 ...

  10. Laravel 框架根据经纬度计算在一定距离内的数据

    $model = DB::table('table_name'); public static function scope_distance($model, $from_latitude, $fro ...