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

news2025/2/22 10:46:35

下一篇:

本项目将分段设计“图书管理登录UI界面”的用户登录、用户注册、用户账号找回等。主要围绕GUI标准库tkinter、以及类的继承(重点)来设计本项目。

首先新建一个文件夹命名为“图书管理系统项目”,并在其目录下新建文件code、photo、user_data。然后在code文件下新建“登录UI.py”,再然后把图片放在photo文件下,如下图:

注意:此时的窗口组件并未绑定触发事件,所以按键无法触发。

运行结果

登录UI.py 代码示例

"""
    登录UI 模块
"""

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

import tkinter as tk
from tkinter import ttk


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

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

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

        self.width = self.winfo_screenwidth()           # 窗口宽初始位置为屏幕宽度位置显示
        self.height = self.winfo_screenheight()         # 窗口高初始位置为屏幕高度位置显示

        # 设计自己项目的UI
        self.title('图书管理登录界面')                                  # 标题
        self.geometry(f'610x406+{self.width//4}+{self.height//8}')   # 窗口像素大小
        self.resizable(0, 0)                                         # 窗口大小禁止调节

        # 窗口背景图
        self.backgroundPhoto = tk.PhotoImage(file='..\\photo\\用户登录背景.png')
        self.backgroundButton = ttk.Button(self, image=self.backgroundPhoto)
        self.backgroundButton.pack()

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

        # 输入格式错误提示
        self.hintLabel = tk.Label(self, text='欢迎使用【图书管理系统】')
        self.hintLabel.pack(side=tk.BOTTOM, fill=tk.BOTH)

        # 用户名
        tk.Label(self, text='用户名').place(x=170, y=160)

        # 输入用户名
        self.userName = tk.StringVar()
        self.userEntry = ttk.Entry(self, textvariable=self.userName, width=22)
        self.userEntry.place(x=223, y=161)

        # 随机用户名
        self.randomPhoto = tk.PhotoImage(file='..\\photo\\随机用户名.png')
        self.randomButton = tk.Button(image=self.randomPhoto, relief=tk.FLAT)
        self.randomButton.place(x=358, y=162)

        # 密码
        tk.Label(self, text='密   码').place(x=170, y=200)

        # 输入密码
        self.password = tk.StringVar()
        self.passwordEntry = ttk.Entry(self, textvariable=self.password, width=22)
        self.passwordEntry.place(x=223, y=201)

        # 显示/隐藏密码
        self.showOrConcealCount = 0
        self.showPhoto = tk.PhotoImage(file='..\\photo\\密码显示.png')
        self.concealPhoto = tk.PhotoImage(file='..\\photo\\密码隐藏.png')
        self.showOrConcealButton = tk.Button(image=self.showPhoto, relief=tk.FLAT)
        self.showOrConcealButton.place(x=358, y=205)

        # 验证码
        tk.Label(self, text='验证码').place(x=170, y=244)

        # 输入验证码
        self.inputVerifyCode = tk.StringVar()
        self.verifyEntry = ttk.Entry(self, textvariable=self.inputVerifyCode, width=15)
        self.verifyEntry.place(x=223, y=244)

        # 随机验证码
        self.showVerifyCode = tk.StringVar(value='获取验证码')
        self.verifyButton = tk.Button(self, textvariable=self.showVerifyCode, relief='flat', width=8)
        self.verifyButton.place(x=350, y=240)

        # 刷新验证码
        self.updatePhoto = tk.PhotoImage(file='..\\photo\\验证码更新.png')
        self.updateButton = tk.Button(self, image=self.updatePhoto, relief='flat')
        self.updateButton.place(x=310, y=245)

        # 注册
        self.registerButton = ttk.Button(self, text='注册', width=4)
        self.registerButton.place(x=395, y=159)

        # 找回
        self.retrieveButton = ttk.Button(self, text='找回', width=4)
        self.retrieveButton.place(x=395, y=199)

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

        # 退出
        ttk.Button(self, text='退出', command=self.destroy).place(x=310, y=300)


# 代码测试
if __name__ == '__main__':
    ui = LoginUI()      # 对象实例化
    ui.mainloop()       # 窗口主循环
else:
    print(f'导入【{__name__}】模块')


作者:周华

传作日期:2023/12/10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1298948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LV.13 D1 嵌入式系统移植导学 学习笔记

一、嵌入式系统分层 操作系统:向下管理硬件、向上提供接口 操作系统为我们提供了: 1.进程管理 2.内存管理 3.网络接口 4.文件系统 5.设备管理 那系统移植是干什么呢? 就是将Linux操作系统移植到基于ARM处理器的开发板中。 那为什么要移植系…

PHP基础 - 注释变量

一. 语言开始标识 在PHP中,文件的开头需要使用语言开始标识来指定该文件是PHP代码。标识通常为"<?php",也可以是"<?",但建议使用"<?php"以确保代码的兼容性和可读性。 <?php // PHP代码从这里开始写 二. PHP注释 注释是用…

售权益网络科技的秦明军,创业计划的意义?

售权益网络科技的秦明军&#xff0c;创业计划的意义&#xff1f; 声明&#xff1a;本篇分享来自手机[售权益网络科技]蝴蝶号&#xff0c;严禁抄袭&#xff0c;复制&#xff0c;粘贴&#xff0c;以免发生著作版权纠纷&#xff01;创业计划对于创业者来说具有重要的意义&#xf…

微软 Power Platform 零基础 Power Pages 网页搭建高阶实际案例实践(四)

微软 Power Platform 零基础 Power Pages 网页搭建教程之高阶案例实践学习&#xff08;四&#xff09; Power Pages 实际案例学习进阶 微软 Power Platform 零基础 Power Pages 网页搭建教程之高阶案例实践学习&#xff08;四&#xff09;1、新增视图&#xff0c;添加List页面2…

OFDM模糊函数仿真

文章目录 前言一、OFDM 信号及模糊函数1、OFDM 信号表达式2、模糊函数表达式 二、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、OFDM 模糊函数②、OFDM 距离模糊函数③、OFDM 速度模糊函数 前言 本文进行 OFDM 的仿真&#xff0c;首先看一下 OFDM 的模糊函数仿真效果&#xf…

AcWing 93. 递归实现组合型枚举

Every day a AcWing 题目来源&#xff1a;93. 递归实现组合型枚举 解法1&#xff1a;回溯算法 标准的回溯算法模板题。 如果把 n、m 和数组 nums 都设置成全局变量的话&#xff0c;backtracking 回溯函数可以只用一个参数 level。 注意传参时 nums 不能用引用&#xff0c;…

Linux 压缩、文件传输与安装

目录 1. 压缩 1.1 tar 1.2 gzip 1.3 zip 1.4 rar 2 文件传输 2.1 网站下载 2.2 scp 传输 2.3 rz 和 sz 2.4 xftp 3.安装 3.1 编译安装 &#xff08;ngnix&#xff09; 3.2 rpm 安装 3.3 yum 安装 1. 压缩 1.1 tar 使用 tar 压缩文件时&#xff0c;会保留源文件…

(一)五种最新算法(SWO、COA、LSO、GRO、LO)求解无人机路径规划MATLAB

一、五种算法&#xff08;SWO、COA、LSO、GRO、LO&#xff09;简介 1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为&…

项目一 分析并设计学生管理数据库

项目一 分析并设计学生管理数据库 1&#xff0c;做好管理数据库的知识准备 1.1&#xff0c;初识数据库 **1&#xff0c;DBMS&#xff1a;**数据库管理系统(Database Management System)。数据库 是通过DBMS创建和操作的 容器。 **2&#xff0c;DB&#xff1a;**数据库(data…

Ubuntu20.04使用cephadm部署ceph集群

文章目录 Requirements环境安装Cephadm部署Ceph单机集群引导&#xff08;bootstrap&#xff09;建立新集群 管理OSD列出可用的OSD设备部署OSD删除OSD 管理主机列出主机信息添加主机到集群从集群中删除主机 部署Ceph集群 Cephadm通过在单个主机上创建一个Ceph单机集群&#xff0…

最长子串问题(LCS)--动态规划解法

题目描述&#xff1a; 如果Z既是X的子串&#xff0c;又是Y的子串&#xff0c;则称Z为X和Y的公共子串。 如果给定X、Y&#xff0c;求出最长Z及其长度。 注意&#xff1a;这里求的不是子序列&#xff0c;两者的意思并不相同。子串要求连续&#xff0c;子序列并不需要。 如果想…

操作系统考研笔记(王道408)

文章目录 前言计算机系统概述OS的基本概念OS的发展历程OS的运行机制OS体系结构OS引导虚拟机 进程和线程进程和线程基础进程进程状态进程控制进程通信线程线程实现 CPU调度调度的层次进程调度细节调度算法评价指标批处理调度算法交互式调度方法 同步与互斥基本概念互斥互斥软件实…

Python 云服务器应用,Https,定时重启

Python 云服务器应用,Https,定时重启 环境搭建Python模块模块导入生成Flask实例GET处理启动服务器打开网页验证 GET接入证书 支持https申请证书下载证书保留 xxx.crt 和 xxx.key文件就可以了 copy到python项目目录ssl_context 配置 宝塔面板操作在www目录下新建python工作目录在…

大作文:图画(06:偶像崇拜)

题目 第一段 第二段 第三段 第四段

蓝桥小白赛1

&#x1f469;‍&#x1f3eb; 地址 1. 蘑菇炸弹 &#x1f469;‍&#x1f3eb; 蘑菇炸弹 &#x1f389; AC code import java.util.Scanner;public class Main {public static void main(String[] args){Scanner sc new Scanner(System.in);int n sc.nextInt();int[] a …

STM32F407-14.3.9-02输出比较模式

输出比较模式 输出比较模式生成波形时 当采用上升沿或下降沿计数时&#xff0c;更改ARR的值可改变周期&#xff1b; 更改CCRx的值会影响到生成波形的相位。波形的占空比永远50% 当采用中心对齐模式时&#xff0c; 更改ARR的值可以改变周期&#xff0c;更改CCRx的值可以改…

【每日一题】【面试经典150 | 动态规划】爬楼梯

Tag 【动态规划】【数组】 题目来源 70. 爬楼梯 题目解读 有过刷题「动态规划」刷题经验的读者都知道&#xff0c;爬楼梯问题是一种最典型也是最简单的动态规划问题了。 题目描述为&#xff1a;你每次可以爬 1 或者 2 个台阶&#xff0c;问爬上 n 阶有多少种方式。 解题思路…

Ubuntu上安装 Git

在 Ubuntu 上安装 Git 可以通过包管理器 apt 进行。以下是在 Ubuntu 上安装 Git 的步骤&#xff1a; 打开终端。你可以按 Ctrl Alt T 组合键来打开终端。 运行以下命令以确保你的系统的软件包列表是最新的&#xff1a; sudo apt update 安装 Git&#xff1a; sudo apt inst…

C/C++,贪婪算法——博鲁夫卡算法(Boruvka)的计算方法与源程序

1 文本格式 // Boruvkas algorithm to find Minimum Spanning // Tree of a given connected, undirected and // weighted graph #include <stdio.h> // a structure to represent a weighted edge in graph struct Edge { int src, dest, weight; }; // a struc…

Leetcode刷题详解——字符串相加

1. 题目链接&#xff1a;415. 字符串相加 2. 题目描述&#xff1a; 给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库&#xff08;比如 BigInteger&#xff09;&#xff0c; 也不能直接将…