【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

相关推荐
junlaii1 分钟前
Windows 安装 claude code 教程
windows·ai
Darkershadow21 分钟前
python学习之串口通信
python·学习
Macbethad1 小时前
自动化测试技术报告
开发语言·lua
3824278271 小时前
python:输出JSON
前端·python·json
不会画画的画师1 小时前
Go开发指南:io/ioutil包应用和迁移指南
开发语言·后端·golang
2503_928411561 小时前
12.22 wxml语法
开发语言·前端·javascript
5980354151 小时前
【java工具类】小数、整数转中文大写
android·java·开发语言
JIngJaneIL1 小时前
基于java + vue个人博客系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
吃喝不愁霸王餐APP开发者2 小时前
Java后端服务在对接全国性霸王餐API时的多数据中心部署与就近调用策略
java·开发语言
也许是_2 小时前
大模型应用技术之 详解 MCP 原理
人工智能·python