基于tkinter的学生信息管理系统之登录界面和主界面菜单设计

news2024/9/8 23:16:50

目录

一、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 mainPage


class loginFarme(object):
    def __init__(self, window):
        self.window = window
        self.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 = window
        self.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 json


class 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 tk


class mainPage(object):
    # window:tk.Tk只作为一个提示是TK对象,写完这个就可以显示方法提示
    def __init__(self, window: tk.Tk):
        self.window = window
        self.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'] = menuBar

    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()


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"
  }
]

 今天的分享就是这样了,下次带来关于学生信息管理系统的进一步页面设计。

 

 

 

 

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

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

相关文章

文件操作相关的精讲

目录: 思维导图 一. 文件定义 二. 文件的打开和关闭 三. 文件的顺序读写操作 四. 文件的随机读写操作 五. 文本文件和二进制文件 六. 文件读取结束的判断 七.文件缓冲区 思维导图: 一. 文件定义 1.文件定义 C语言中,文件是指一组相…

Chapter 18 Python异常

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能! 文章目录 前言一、什么是异常二、捕获异常三、异常的传递 前言 在Python中,异常是一种特定的对象,能够在程序运行过程中被抛出和处理。有效地管理异常不仅可以…

Spark+实例解读

第一部分 Spark入门 学习教程:Spark 教程 | Spark 教程 Spark 集成了许多大数据工具,例如 Spark 可以处理任何 Hadoop 数据源,也能在 Hadoop 集群上执行。大数据业内有个共识认为,Spark 只是Hadoop MapReduce 的扩展&#xff08…

精准客户从何而来?一招让你的客户源源不断!

你们是否还在为找不到精准客户而烦恼? 今天,我要分享一招非常实用的技巧,让你也能拥有源源不断的客源! 首先,我们需要深入了解自己的目标客户。他们是谁?他们的需求是什么?并利用大数据洞察客…

Cocos Creator文档学习记录

Cocos Creator文档学习记录 一、什么是Cocos Creator 官方文档链接:Hello World | Cocos Creator 百度百科:Cocos Creator_百度百科 Cocos Creator包括开发和调试、商业化 SDK 的集成、多平台发布、测试、上线这一整套工作流程,可多次的迭…

【前端 19】使用Vue-CLI脚手架构建Vue2项目

使用Vue CLI构建Vue 2项目 引言 Vue.js 是一个构建用户界面的渐进式JavaScript框架,以其轻量级和易用性受到前端开发者的广泛喜爱。Vue CLI(Vue Command Line Interface)是一个基于Vue.js进行快速开发的完整系统,提供了零配置的项…

Amazon Bedrock + Amazon DynamoDB 数据设计与建模

一、Amazon DynamoDB简介 在当今数字化转型的浪潮中,企业对数据处理能力的需求日益增长,为了应对大规模数据和高并发访问的挑战,选择一款合适的数据库解决方案变得尤为重要。 Amazon DynamoDB,作为亚马逊云科技提供的一种完全托…

【人工智能】Transformers之Pipeline(六):图像分类(image-classification)

目录 一、引言 二、图像分类(image-classification) 2.1 概述 2.2 技术原理 2.3 应用场景 2.4 pipeline参数 2.4.1 pipeline对象实例化参数 2.4.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模型排名 三、总结 一、引言 pipeline&#x…

文远知行IPO,L4的梦还是L2给的

文|刘俊宏 编|王一粟 随着萝卜快跑在武汉初步验证了Robotaxi商业闭环,L4自动驾驶的公司们终于迎来了“黎明的曙光”。 7月27日,文远知行向美国SEC(证券交易委员会)提交了招股书,以超越Moment…

Flask Bootstrap #2 - MVC架构

Reference https://medium.com/%E5%B7%A5%E7%A8%8B%E9%9A%A8%E5%AF%AB%E7%AD%86%E8%A8%98/%E4%BD%BF%E7%94%A8-python-flask-%E5%BB%BA%E7%AB%8B%E7%B6%B2%E7%AB%99-353e449a9bc8 1 MVC架构 在 Flask Boostrap #1 - 安装Flask 透过 app.route() 建立路由是 flask API 常见的…

实验2-4-1 求1到N的和*--sum记得累加啊!

//实验2-4-1 求1到N的和//计算序列 1 2 3 ... 的前N项之和。#include<stdio.h> #include<math.h> int main(){int N,sum0;scanf("%d",&N);for(int a1;a<N;a){ suma;//sum进行累加&#xff01;&#xff01;&#xff01;&#xff01;&#xff01…

VS2019编译和使用gtest测试(C++)

目录 一、首先下载gtest开源 二、使用gtest 一、首先下载gtest开源 https://pan.baidu.com/s/15m62KAJ29vNe1mrmAcmehA 提取码&#xff1a;vfxz 下载下来解压到文件夹&#xff0c;再在文件夹里面新建一个build文件夹&#xff0c;如下&#xff1a; 再安装cmake&#xff0c;…

Cocos Creator2D游戏开发(6)-飞机大战(4)-敌机产生

敌机产生&玩家发射子弹 敌机产生: 创建一个空节点 创建一个敌机预制体 把敌机图片拖入预制体内 使用代码生成敌机 让敌机动起来 创建一个预制体enemy_prefab双击预制体enemy_prefab,然后拖入一个敌机图片,设置好方向和尺寸,一定要记得保存然后关闭(场景编辑器里面的保存)…

【前端 18】安装Node.js

Node.js 安装指南 在今天的博客中&#xff0c;我们将一起探讨如何在您的计算机上安装Node.js。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;它允许你在服务器端运行 JavaScript 代码。无论您是前端开发者希望探索全栈开发&#xff0c;还是后端开发者寻…

【ROS 最简单教程 002/300】ROS 环境安装 (虚拟机版): Noetic

&#x1f497; 有遇到安装问题可以留言呀 ~ 当时踩了挺多坑&#xff0c;能帮忙解决的我会尽力 &#xff01; 1. 安装操作系统环境 Linux ❄️ VM / VirtualBox Ubuntu20.04 &#x1f449; 保姆级图文安装教程指路&#xff0c;有经验的话 可以用如下资源自行安装 ITEMREFERENCE…

Excel模拟计算演示-以矩阵乘计算密度为例

Excel模拟计算演示-以矩阵乘计算密度为例 1.参考链接2.CUDA_Occupancy_Calculator截图3.矩阵乘计算密度模拟计算的操作步骤及效果 安装好CUDA之后,/usr/local/cuda-12.1/tools/CUDA_Occupancy_Calculator.xls里会看到"TABLE(,B17)"这样的表达式,原来是模拟计算的结果…

Stable Diffusion 提示词攻略

一、提示词作用 提示词所做的工作是缩小模型出图的解空间&#xff0c;即缩小生成内容时在模型数据里的检索范围&#xff0c;而非直接指 定作画结果。 提示词的效果也受模型的影响&#xff0c;有些模型对自然语言做特化训练&#xff0c;有些模型对单词标签对做特化训练&#xf…

Lumos学习王佩丰Excel第八讲:IF函数逻辑判断

本节课与数学无关&#xff0c;与逻辑强相关。这节课对理工科&#xff0c;尤其是对有计算机基础的同学们会很友好。 一、使用IF函数 1、IF函数的基本用法 函数语法&#xff1a;IF(logical_test,[value_if_true],[value_if_false]) logical_test&#xff1a;判断条件 [value…

现在有什么赛道可以干到退休?

最近&#xff0c;一则“90后无论男女都得65岁以后退休”的消息在多个网络平台流传&#xff0c;也不知道是真是假&#xff0c;好巧不巧今天刷热点的时候又看到一条这样的热点&#xff1a;现在有什么赛道可以干到退休&#xff1f; 点进去看了几条热评&#xff0c;第一条热评说的…

品牌控价:维护市场秩序的关键策略

在当今竞争激烈的市场环境中&#xff0c;品牌控价成为了品牌发展的重要环节。品牌在拓展销售渠道时&#xff0c;为确保自身的形象与利益&#xff0c;通常会为经销商设定出货价和建议零售价。然而&#xff0c;部分经销商为追求短期利益&#xff0c;在电商平台上进行低价引流&…