【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

相关推荐
宋发元4 分钟前
如何使用正则表达式验证域名
python·mysql·正则表达式
Dontla14 分钟前
Rust泛型系统类型推导原理(Rust类型推导、泛型类型推导、泛型推导)为什么在某些情况必须手动添加泛型特征约束?(泛型trait约束)
开发语言·算法·rust
XMYX-037 分钟前
Python 操作 Elasticsearch 全指南:从连接到数据查询与处理
python·elasticsearch·jenkins
大福是小强40 分钟前
035_Progress_Dialog_in_Matlab中的进度条对话框
ui·matlab·进度条·界面开发·ux·用户界面
正义的彬彬侠41 分钟前
sklearn.datasets中make_classification函数
人工智能·python·机器学习·分类·sklearn
belldeep43 分钟前
python:用 sklearn 转换器处理数据
python·机器学习·sklearn
安静的_显眼包O_o44 分钟前
from sklearn.preprocessing import Imputer.处理缺失数据的工具
人工智能·python·sklearn
安静的_显眼包O_o1 小时前
from sklearn.feature_selection import VarianceThreshold.移除低方差的特征来减少数据集中的特征数量
人工智能·python·sklearn
_可乐无糖1 小时前
pytest中的断言
python·pytest
Neophyte06081 小时前
C++算法练习-day40——617.合并二叉树
开发语言·c++·算法