Tkinter模块GUI界面化编程实战(一)——登录界面(含详解及完整源码、完整程序下载链接)

简介: Tkinter模块GUI界面化编程实战(一)——登录界面(含详解及完整源码、完整程序下载链接)

【用户登录界面】

【用户注册界面】

【提示界面】(展示一部分)

【登录成功提示】

【源代码】

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()  # 窗口循环

 这里有个小技巧,因为主窗口只能有一个,而且主窗口一旦关闭,所有子窗口都将随之关闭,所以我这里的主窗口只能选择为登录后窗口,但是程序一旦打开主窗口就会一直保持打开状态,这不是我们想要的,我们想要的是登录成功后再关闭登录界面(一个子窗口),然后再让登录后的那个窗口打开,所以,这里用的方法是先让登录后窗口隐藏(是打开的,只是我们看不见)  

目录
相关文章
|
9月前
|
Python
【Python】4. 人生重开模拟器(简易版)
【Python】4. 人生重开模拟器(简易版)
137 2
|
9月前
|
Python
Python人生重开模拟器代码展示
本文主要是人生重开模拟器的代码演示
|
9月前
|
人工智能 物联网 测试技术
怎么用Python高仿一个任务管理器
怎么用Python高仿一个任务管理器
115 0
|
9月前
|
数据可视化 C# 图形学
【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)
【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)
284 0
|
C++ Python
Python+Qt抽奖点名工具源码窗体程序
Python+Qt抽奖点名工具源码窗体程序
166 0
Python+Qt抽奖点名工具源码窗体程序
|
小程序 Python
Tkinter模块GUI界面化编程实战(四)——随机点名小程序(含详解及完整源码、完整程序下载链接)
Tkinter模块GUI界面化编程实战(四)——随机点名小程序(含详解及完整源码、完整程序下载链接)
266 0
Tkinter模块GUI界面化编程实战(四)——随机点名小程序(含详解及完整源码、完整程序下载链接)
|
Linux Python
Python3,1行代码,制作GUI图形界面,果然被种草了。
Python3,1行代码,制作GUI图形界面,果然被种草了。
103 0
|
存储 人工智能 算法
Tkinter模块GUI界面化编程实战(七)——人机对战五子棋(含超详解及完整源码、完整程序免费下载链接)
Tkinter模块GUI界面化编程实战(七)——人机对战五子棋(含超详解及完整源码、完整程序免费下载链接)
235 0
Tkinter模块GUI界面化编程实战(七)——人机对战五子棋(含超详解及完整源码、完整程序免费下载链接)
|
Python
Tkinter模块GUI界面化编程实战(三)——2048小游戏(含详解及完整源码、完整程序下载链接)
Tkinter模块GUI界面化编程实战(三)——2048小游戏(含详解及完整源码、完整程序下载链接)
225 0
|
Python
Tkinter模块GUI界面化编程实战(二)—— 计算器(含详解及完整源码、完整程序下载链接)
Tkinter模块GUI界面化编程实战(二)—— 计算器(含详解及完整源码、完整程序下载链接)
166 0

相关实验场景

更多