基于tkinter的学生信息管理系统之登录界面和主界面菜单设计
目录
一、tkinter的介绍
二、登陆界面的设计
1、登陆界面完整代码
2、部分代码讲解
3、登录的数据模型设计
4、效果展示
三、学生主界面菜单设计
1、学生主界面菜单设计完整代码
2、 部分代码讲解
3、效果展示
四、数据库的模型设计
欢迎大家进来学习和支持!!!
今天主要带来的是使用tkinter来制作一期学生信息管理系统
一、tkinter的介绍
tkinter就是python语言里面用来制作一个GUI界面的一个包,这里长话短说,不做过多的言语上的阐述,想了解更多可以点击下面的链接
tkinter官网教程
二、登陆界面的设计
我们开始编写代码的之前,我们的自己先了解一些关于tkinter中的一些组件的使用和方法
1、登陆界面完整代码
"""
Ryan 2024.7.28
登陆页面的制作
"""
import tkinter as tk
from tkinter import messagebox
from db import db
from mainPage import mainPageclass loginFarme(object):def __init__(self, window):self.window = windowself.window.geometry("300x180")self.window.title("登录界面")# 创建变量对象self.username = tk.StringVar()self.password = tk.StringVar()# 用于后面进行页面换页用的self.page = tk.Frame(window)self.page.pack()# 再page里面布局tk.Label(self.page).grid(row=0, column=0)tk.Label(self.page, text="账户:", font=28).grid(row=1, column=1)# textvariable:文本变量tk.Entry(self.page, textvariable=self.username).grid(row=1, column=2)tk.Label(self.page, text="密码:", font=28).grid(row=3, column=1, pady=10)tk.Entry(self.page, textvariable=self.password).grid(row=3, column=2)tk.Button(self.page, text="登录", font=28, command=self.login).grid(row=5, column=1, pady=10)tk.Button(self.page, text="退出", font=28, command=self.page.quit).grid(row=5, column=2)# 登录功能def login(self):name = self.username.get()pwd = self.password.get()flag, message = db.checkLogin(name, pwd)if flag:# 销毁第一页self.page.destroy()# 重新给页面添加内容mainPage(self.window)else:messagebox.showwarning(title="警告", message=message)if __name__ == '__main__':window = tk.Tk()loginFarme(window)window.mainloop()
2、部分代码讲解
对于loginFarme类的讲解:
这个属于类的初始化函数部分,给登录界面创建界面组件用
def __init__(self, window):self.window = windowself.window.geometry("300x180")self.window.title("登录界面")# 创建变量对象self.username = tk.StringVar()self.password = tk.StringVar()# 用于后面进行页面换页用的self.page = tk.Frame(window)self.page.pack()# 再page里面布局tk.Label(self.page).grid(row=0, column=0)tk.Label(self.page, text="账户:", font=28).grid(row=1, column=1)# textvariable:文本变量tk.Entry(self.page, textvariable=self.username).grid(row=1, column=2)tk.Label(self.page, text="密码:", font=28).grid(row=3, column=1, pady=10)tk.Entry(self.page, textvariable=self.password).grid(row=3, column=2)tk.Button(self.page, text="登录", font=28, command=self.login).grid(row=5, column=1, pady=10)tk.Button(self.page, text="退出", font=28, command=self.page.quit).grid(row=5, column=2)
这一部分是为了实现登陆的功能和警告信息,这里面调用了db这个类对象checkLogin方法,是为了检查账户密码的正确性,这个类对象会在后面定义,这里的mainPage方法是调用了mainPage.py文件里的方法,为了登录成功后进入到学生管理系统主界面
# 登录功能def login(self):name = self.username.get()pwd = self.password.get()flag, message = db.checkLogin(name, pwd)if flag:# 销毁第一页self.page.destroy()# 重新给页面添加内容mainPage(self.window)else:messagebox.showwarning(title="警告", message=message)
这个代码块想必大家都很熟悉,这个代码块主要是为了检查该程序是否能够在这个文件里运行,这里的tk.Tk()和mainloop()方法是打开窗口界面和循环显示窗口界面的功能
if __name__ == '__main__':window = tk.Tk()loginFarme(window)window.mainloop()
3、登录的数据模型设计
这里是主要封装了一个对于登录信息的检查,这里没有用到数据库,而是自己创建了一个json的数据模型来代替,这个就是上面所说到的checkLogin()方法的定义代码
"""
Ryan 2024.7.28
建立登录的数据模型
"""
import jsonclass mySqlDatabases(object):def __init__(self):with open('student.json', mode='r', encoding='utf-8') as f:text = f.read()self.students = json.loads(text)f.close()def checkLogin(self, username, password):for student in self.students:if username == student['username']:if password == student['password']:return True, '登陆成功'else:return False, '登陆失败,密码不存在'return False, '登陆失败,用户名不存在'# 实例化类对象
db = mySqlDatabases()
if __name__ == '__main__':print(db.checkLogin('admin', '123456'))
4、效果展示

三、学生主界面菜单设计
接下来我们设计好登录界面后,就是进入到学生的主界面设计
1、学生主界面菜单设计完整代码
"""
Ryan 2024.7.28
学生页面的制作
"""
import tkinter as tkclass mainPage(object):# window:tk.Tk只作为一个提示是TK对象,写完这个就可以显示方法提示def __init__(self, window: tk.Tk):self.window = windowself.window.geometry('600x400')self.window.title('学生管理系统 V0.0.1')self.createPage()def createMenu(self):self.aboutFrame = tk.Frame(self.window)tk.Label(self.aboutFrame, text='关于作品:本作品是tkinter制作的').pack()tk.Label(self.aboutFrame, text='关于作者:Ryan').pack()tk.Label(self.aboutFrame, text='版权所有:Ryan').pack()self.changeFrame = tk.Frame(self.window)tk.Label(self.changeFrame, text='修改页面').pack()self.deleteFrame = tk.Frame(self.window)tk.Label(self.deleteFrame, text='删除页面').pack()self.searchFrame = tk.Frame(self.window)tk.Label(self.searchFrame, text='搜索页面').pack()self.insertFrame = tk.Frame(self.window)tk.Label(self.insertFrame, text='录入页面').pack()def createPage(self):self.createMenu()menuBar = tk.Menu(self.window)menuBar.add_command(label='录入', command=self.showInsert)menuBar.add_command(label='查询', command=self.showSearch)menuBar.add_command(label='删除', command=self.showDelete)menuBar.add_command(label='修改', command=self.showChange)menuBar.add_command(label='关于', command=self.showAbout)# 将menuBar添加窗口中self.window['menu'] = menuBardef showAbout(self):self.changeFrame.pack_forget()self.deleteFrame.pack_forget()self.searchFrame.pack_forget()self.insertFrame.pack_forget()self.aboutFrame.pack()def showChange(self):self.aboutFrame.pack_forget()self.deleteFrame.pack_forget()self.searchFrame.pack_forget()self.insertFrame.pack_forget()self.changeFrame.pack()def showDelete(self):self.aboutFrame.pack_forget()self.changeFrame.pack_forget()self.searchFrame.pack_forget()self.insertFrame.pack_forget()self.deleteFrame.pack()def showSearch(self):self.aboutFrame.pack_forget()self.changeFrame.pack_forget()self.deleteFrame.pack_forget()self.insertFrame.pack_forget()self.searchFrame.pack()def showInsert(self):self.aboutFrame.pack_forget()self.changeFrame.pack_forget()self.deleteFrame.pack_forget()self.searchFrame.pack_forget()self.insertFrame.pack()if __name__ == '__main__':window = tk.Tk()mainPage(window)window.mainloop()
2、 部分代码讲解
以下主要是针对mainPage类的讲解:
这里面的createPage函数是添加界面中的菜单按钮,command是当按钮被点击的时候会触发的事件
def createPage(self):self.createMenu()menuBar = tk.Menu(self.window)menuBar.add_command(label='录入', command=self.showInsert)menuBar.add_command(label='查询', command=self.showSearch)menuBar.add_command(label='删除', command=self.showDelete)menuBar.add_command(label='修改', command=self.showChange)menuBar.add_command(label='关于', command=self.showAbout)# 将menuBar添加窗口中self.window['menu'] = menuBar
以下是菜单被点击的时候所触发的函数方法 ,这里面的pack_forget方法是为了清除界面添加的内容,防止内容会一直保留到界面当中
def showAbout(self):self.changeFrame.pack_forget()self.deleteFrame.pack_forget()self.searchFrame.pack_forget()self.insertFrame.pack_forget()self.aboutFrame.pack()def showChange(self):self.aboutFrame.pack_forget()self.deleteFrame.pack_forget()self.searchFrame.pack_forget()self.insertFrame.pack_forget()self.changeFrame.pack()def showDelete(self):self.aboutFrame.pack_forget()self.changeFrame.pack_forget()self.searchFrame.pack_forget()self.insertFrame.pack_forget()self.deleteFrame.pack()def showSearch(self):self.aboutFrame.pack_forget()self.changeFrame.pack_forget()self.deleteFrame.pack_forget()self.insertFrame.pack_forget()self.searchFrame.pack()def showInsert(self):self.aboutFrame.pack_forget()self.changeFrame.pack_forget()self.deleteFrame.pack_forget()self.searchFrame.pack_forget()self.insertFrame.pack()
3、效果展示
当你点击下面不同菜单的时候,会进入到不同的页面


四、数据库的模型设计
采用json格式去设计数据模块,后期会用上数据库的连结
[{"username": "admin","password": "123456"},{"username": "Ryan","password": "123456"}
]
今天的分享就是这样了,下次带来关于学生信息管理系统的进一步页面设计。
相关文章:
基于tkinter的学生信息管理系统之登录界面和主界面菜单设计
目录 一、tkinter的介绍 二、登陆界面的设计 1、登陆界面完整代码 2、部分代码讲解 3、登录的数据模型设计 4、效果展示 三、学生主界面菜单设计 1、学生主界面菜单设计完整代码 2、 部分代码讲解 3、效果展示 四、数据库的模型设计 欢迎大家进来学习和支持!…...
web基础以及http协议
⼀、web基本概念和常识 Web:为⽤户提供的⼀种在互联⽹上浏览信息的服务,Web 服 务是动态的、可交 互的、跨平台的和图形化的。 Web 服务为⽤户提供各种互联⽹服务,这些服务包括信息浏览 服务,以及各种交互式服务,包括…...
DataEase一键部署:轻松搭建数据可视化平台
DataEase是一个开源的数据可视化和分析工具,旨在帮助用户轻松创建和共享数据仪表盘。它支持多种数据源,包括关系型数据库,文件数据源,NoSQL数据库等,提供强大的数据查询、处理和可视化功能。DataEase 不仅是一款数据可…...
网络安全相关竞赛比赛
赛事日历(包含全国所有网络安全竞赛) https://datacon.qianxin.com/competition/competitions https://www.ichunqiu.com/competition/all 全国网络安全竞赛 名称链接全国大学生信息安全竞赛http://www.ciscn.cn/信息安全与对抗技术竞赛(In…...
Vscode——如何快速搜索项目工程中的某个文件的位置
第一步:按 shift ctrl p 第二步:然后把 > 删除 第三步:输入文件名称即可...
Kubernetes 正在弃用 Docker?Docker将何去何从?
一段时间以来,当人们想到容器时,似乎都会想到Docker和Kubernetes。在构建和运行容器方面,Docker 一直是大名鼎鼎的品牌,而在管理和编排容器方面,Kubernetes 一直是大名鼎鼎的品牌。听到 Kubernetes 从 1.20 版开始不再…...
编程语言「描述符」漫谈——以C++与Rust为例的行为声明与类型描述
编程语言中有三种描述符: 声明符: 表示一种动作, 比如创建变量, 定义函数等等;说明符: 也就是类型说明符, 表示一种数据类型;修饰符: 表示动作或类型的属性, 例如不可变…… swift语言就是严格遵循这些描述符的, 例如, objc是修饰符 , 表示编译成OC兼容函数, func 是声明符, …...
电脑屏幕录制软件哪个好?推荐3款,满足各种录制需求
大家好,今天和大家来聊一个既实用又有点神秘的话题——电脑屏幕录制软件哪个好?这是个让众多网友头疼的问题,毕竟谁不想拥有一款既好用又好玩的录制神器呢? 首先,我们得明确屏幕录制软件可不是简单地录屏而已…...
大模型学习应用 1:用 itrex 创新高效实现 LLM 的部署和微调
用 itrex 创新高效实现 LLM 的部署和微调 - 项目作业 目录 准备工作Task 1 完成在线环境的工具包安装,包含 基础环境包、Extension for Transformers 包、加速计算包Task 2 利用 Intel Extension for Transformers 部署通义千问 Qwen-7B Chat,并根据 pr…...
【Android】碎片—动态添加、创建Fragment生命周期、通信
简单用法 在一个活动中添加两个碎片,并让这两个碎片平分活动空间 先新建一个左侧碎片布局和一个右侧碎片布局 左侧碎片 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/…...
前端 SSE 长连接
使用 const options {withCredentials: true, // 默认 false}const eventSource new EventSource(/api, options);eventSource.addEventListener(open, () > {});eventSource.onmessage (event) > {}; // 或addEventListener(message,callback)eventSource.addEvent…...
.mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
chrome浏览器目前只支持编解码格式为H264格式的视频,如果某个.mp4后缀的视频不能在chrome浏览器中播放,多半是这个视频的编码格式不是H264的! 1、可以通过ffmpeg工具查看当前视频的编码格式: ffprobe -v error -select_streams v…...
Python酷库之旅-第三方库Pandas(051)
目录 一、用法精讲 186、pandas.Series.is_monotonic_increasing属性 186-1、语法 186-2、参数 186-3、功能 186-4、返回值 186-5、说明 186-6、用法 186-6-1、数据准备 186-6-2、代码示例 186-6-3、结果输出 187、pandas.Series.is_monotonic_decreasing属性 187…...
linux timestamp
驱动或应用中获取时间戳的接口。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <sys/time.h> #if 0 #include <linux/ktime.h> /* 内核驱动中获取时间戳 */ static ktime_t get_kernel_time…...
Vue.js 搭建大屏可视化项目
引言 在数字化转型的时代背景下,大屏可视化项目因其直观的数据展示和实时的业务监控能力而变得日益重要。Vue.js,以其简洁的语法、高效的虚拟DOM和强大的组件化能力,成为了构建大屏可视化应用的首选框架之一。本文将从零开始,引导…...
Linux:进程信号(二.信号的保存与处理、递达、volatile关键字、SIGCHLD信号)
上次介绍了:(Linux:进程信号(一.认识信号、信号的产生及深层理解、Term与Core))[https://blog.csdn.net/qq_74415153/article/details/140624810] 文章目录 1.信号保存1.1递达、未决、阻塞等概念1.2再次理解信号产生与保存1.3信号…...
最值得推荐的5个AI大模型API
在这个以人工智能为主导的新时代,选择一个卓越的AI模型API接口,对于企业和个人在AI驱动的商业和技术革新中取得成功至关重要。 在人工智能的浪潮中,大型AI模型API接口正成为推动技术创新和业务发展的重要力量。随着2024年技术的持续进步和应用…...
PyTest+Allure生成测试报告
一、官网文档(权威) 1. Allure Report 官网:Allure Report Docs — Introduction 2. Allure GitHub地址:GitHub - allure-framework/allure2: Allure Report is a flexible, lightweight multi-language test reporting tool. It …...
ROS2教程(10) - 编写接收程序、添加frame - Linux
注意 : 本篇文章接上节 (点击此处跳转到上节) 编写接收程序 cpp <the_work_ws>/src/learning_tf2_cpp/src/turtle_tf2_listener.cpp #include <chrono> #include <functional> #include <memory> #include <string>#include "geometry_…...
Arraylist与LinkedList的区别
Arraylist 概念 Arraylist非线程安全Arraylist 底层使用的是Object数组ArrayList 采用数组存储,插入和删除元素的时间复杂度受元素位置的影响ArrayList 支持快速随机访问,就是通过元素的序号快速获取元素对象ArrayList的空间浪费主要体现在列表的结尾会预留一定的容…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
