【Python】手把手教你用tkinter设计图书管理登录界面(中)

上一篇:【Python】手把手教你用tkinter设计图书管理登录界面(上)-CSDN博客

下一篇:略

紧接上一篇文章,逐步实现功能,跟着我的脚步,把音乐打开,吃意大利面拌42号混凝土时,不影响东条英鸡捕捉野生三角函数。

运行结果

代码示例

python 复制代码
"""
    图书管理登录界面
"""

# 通配符 '*'
__all__ = ['main']

import tkinter as tk
from tkinter import ttk


class LoginUI(tk.Tk):
    """继承tk.Tk,创建登录UI"""

    def __init__(self):
        """构造方法"""

        # 调用tk.Tk的构造方法
        super().__init__()

        # 设计自己项目的UI
        self.title('图书管理登录界面')      # 标题
        self.geometry('600x375')         # 窗口像素大小
        self.resizable(0, 0)            # 窗口大小禁止调节

        # 窗口背景图
        photo = tk.PhotoImage(file='.\\..\\photo\\窗口背景图.png')
        tk.Label(self, image=photo).pack()

        # 系统名
        tk.Label(self, text='图  书  管  理  系  统', font=('Tahoma', 30, 'bold')).place(x=110, y=40)

        # 用户名
        tk.Label(self, text='用户名').place(x=170, y=160)
        # 输入用户名
        self.userName = tk.StringVar()
        self.userEntry = ttk.Entry(self, textvariable=self.userName)
        self.userEntry.place(x=223, y=161)
        # 随机用户名
        ttk.Button(text='随机', width=4, command=self.randomUser).place(x=380, y=159)

        # 密码
        tk.Label(self, text='密   码').place(x=170, y=200)
        # 输入密码
        self.password = tk.StringVar()
        self.passwordEntry = ttk.Entry(self, textvariable=self.password)
        self.passwordEntry.place(x=223, y=201)
        # 显示/隐藏密码
        self.count = 0
        self.showButton = ttk.Button(text='显示', width=4, command=self.showPassword)
        self.showButton.place(x=380, y=199)

        # 验证码
        tk.Label(self, text='验证码').place(x=170, y=244)
        # 输入验证码
        self.inputVerifyCode = tk.StringVar()
        self.verifyEntry = ttk.Entry(self, textvariable=self.inputVerifyCode, width=10)
        self.verifyEntry.place(x=223, y=244)
        # 随机验证码
        self.showVerifyCode = tk.StringVar(value=self.getVerifyCode())
        tk.Button(self, textvariable=self.showVerifyCode, relief='flat', width=7, command=self.updateVerifyCode).place(x=310, y=240)
        # 刷新验证码
        updatePhoto = tk.PhotoImage(file='.\\..\\photo\\验证码更新.png')
        tk.Button(self, image=updatePhoto, relief='flat', command=self.updateVerifyCode).place(x=384, y=240)

        # 登录
        ttk.Button(self, text='登录').place(x=200, y=300)
        # 注册
        ttk.Button(self, text='注册').place(x=300, y=300)

        # 预显示提示输入
        self.bind('<FocusIn>', self.hintInput)

        self.mainloop()


    # 更新验证码
    def updateVerifyCode(self, event=None):
        self.showVerifyCode.set(self.getVerifyCode())


    # 获取验证码
    def getVerifyCode(self, num=6, event=None):
        import random

        # 获取6位验证码的容器
        container = []
        # 大小写字母
        for i in range(26):
            container.append(chr(ord('a')+i))
            container.append(chr(ord('A')+i))
        # 数字
        for i in range(26*2):
            container.append(str(i)[-1])

        # 在容器内获取随机数
        verify_code = ''
        for i in range(num):
            verify_code += random.choice(container)

        return verify_code

    # 显示密码
    def showPassword(self, event=None):
        self.count += 1
        if self.count % 2:
            self.showButton.config(text='隐藏')
            self.passwordEntry.config(show='')
        else:
            self.showButton.config(text='显示')
            if self.password.get() != '请输入密码':
                self.passwordEntry.config(show='*')


    # 随机用户名
    def randomUser(self, event=None):
        import random
        name = ['枫叶国池阮范', '阿三国郑井人', '灯塔国申井冰', '泡菜国杨巅峰', '刺身国董不咚',
                '吕友兵', '侯力携', '布重用', '戴铝帽', '史真香', '李盐虾', '戳霜燕']
        # 插入用户名
        self.userName.set(random.choice(name))
        self.userEntry.config(foreground='black')


    # 预显示提示输入
    def hintInput(self, event=None):

        # 预显示输入用户名
        if not self.userName.get():
            self.userName.set('请输入用户名')
            self.userEntry.config(foreground='gray')
        elif self.userName.get() == '请输入用户名' and str(event.widget) == '.!entry':
            self.userName.set('')
            self.userEntry.config(foreground='black')

        # 预显示输入密码
        if not self.password.get():
            # 显示密码输入
            self.passwordEntry.config(show='')
            self.password.set('请输入密码')
            self.passwordEntry.config(foreground='gray')
        elif self.password.get() == '请输入密码' and str(event.widget) == '.!entry2':
            self.password.set('')
            self.passwordEntry.config(foreground='black')
            # 判断是否隐藏密码
            if not self.count % 2:
                self.passwordEntry.config(show='*')

        # 预显示输入验证码
        if not self.inputVerifyCode.get():
            self.inputVerifyCode.set('验证码')
            self.verifyEntry.config(foreground='gray')
        elif self.inputVerifyCode.get() == '验证码' and str(event.widget) == '.!entry3':
            self.inputVerifyCode.set('')
            self.verifyEntry.config(foreground='black')


ui = LoginUI()      # 实例化对象


# 主函数
def main():
    print('Hello world.')

# 代码测试
if __name__ == '__main__':
    main()
else:
    print(f'导入{__name__}模块')

作者:周华

创作日期:2023/12/2

相关推荐
默_笙2 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
rockmelodies2 天前
# Windows Server2008 R2 Standard(SP1镜像U盘)重置本地管理员密码【完整详细步骤】
windows·密码破解
qq_426003962 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技2 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
大蓝头2 天前
安装包UI美化之路-nsNiuniuSkin全新UI调试与预览方法
ui·electron·安装包·截图控件·截屏控件
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时2 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++