首页 > 编程语言 >python学生管理系统笔记(基础框架)

python学生管理系统笔记(基础框架)

时间:2023-05-16 10:37:40浏览次数:37  
标签:__ 管理系统 python self 笔记 tk root frame pack

 

1. LoginPage.py

import tkinter as tk
from tkinter import messagebox
from db import db
from MainPage import MainPage


class LoginPage:
    def __init__(self, master):
        self.root = master
        self.root.geometry('300x180')
        self.root.title('登录页')

        self.username = tk.StringVar()
        self.password = tk.StringVar()
        #  实现翻页
        self.page = tk.Frame(root)
        self.page.pack()

        # 布局
        tk.Label(self.page).grid(row=0, column=0)

        tk.Label(self.page, text='用户:').grid(row=1, column=1)
        tk.Entry(self.page, textvariable=self.username).grid(row=1, column=2)

        tk.Label(self.page, text='密码:').grid(row=2, column=1, pady=10)
        tk.Entry(self.page, textvariable=self.password).grid(row=2, column=2)

        tk.Button(self.page, text='登录', command=self.login).grid(row=3, column=1, pady=10)
        tk.Button(self.page, text='退出', command=self.page.quit).grid(row=3, column=2)

    # 获取登录信息
    def login(self):
        name = self.username.get()
        pwd = self.password.get()
        flag, msg = db.check_login(name, pwd)
        if flag:
            self.page.destroy()  # 销毁当前页面
            MainPage(self.root)  # 跳转第二个页面
        else:
            messagebox.showwarning(title='警告', message=msg)


if __name__ == '__main__':
    root = tk.Tk()
    LoginPage(master=root)
    root.mainloop()  # 将整个页面显示出来

 

2.MainPage.py

import tkinter as tk
from views import AboutFrame, ChangeFrame, InsertFrame, SearchFram, DeleteFrame


class MainPage:
    # 如果master不写成 master: tk.TK 的话,会没有提示,写了也没有影响,只是说明这个master是一个tk的对象
    def __init__(self, master: tk.Tk):
        self.root = master
        self.root.title('学生信息管理系统 v0.0.1')
        self.root.geometry('600x400')
        self.creat_page()

    # 菜单栏
    def creat_page(self):
        """
        可以直接封装成一个views对象,用的时候直接调用即可
        # '修改'页面
        self.change_frame = tk.Frame(self.root)
        tk.Label(self.change_frame, text='修改页面').pack()

        # '关于'页面布局
        self.about_frame = tk.Frame(self.root)  # 绑定到root对象中
        tk.Label(self.about_frame, text='关于作品:关于本作品由tkinter制作').pack()
        tk.Label(self.about_frame, text='关于制作:关于本作品由tkinter制作').pack()
        """
        """封装后直接调用"""
        self.insert_frame = InsertFrame(self.root)
        self.delete_frame = DeleteFrame(self.root)
        self.chang_frame = ChangeFrame(self.root)
        self.search_frame = SearchFram(self.root)
        self.about_frame = AboutFrame(self.root)

        # 记得要绑定时间command
        menubar = tk.Menu(self.root)
        menubar.add_command(label='录入', command=self.show_insert)
        menubar.add_command(label='查询', command=self.show_search)
        menubar.add_command(label='删除', command=self.show_delete)
        menubar.add_command(label='修改', command=self.show_change)
        menubar.add_command(label='关于', command=self.show_about)
        self.root['menu'] = menubar

    def show_insert(self):
        self.insert_frame.pack()

        self.delete_frame.pack_forget()
        self.chang_frame.pack_forget()
        self.search_frame.pack_forget()
        self.about_frame.pack_forget()

    def show_delete(self):
        self.delete_frame.pack()
        self.insert_frame.pack_forget()

        self.chang_frame.pack_forget()
        self.search_frame.pack_forget()
        self.about_frame.pack_forget()

    def show_change(self):
        self.chang_frame.pack()
        self.insert_frame.pack_forget()
        self.delete_frame.pack_forget()

        self.search_frame.pack_forget()
        self.about_frame.pack_forget()

    def show_search(self):
        self.search_frame.pack()
        self.insert_frame.pack_forget()
        self.delete_frame.pack_forget()
        self.chang_frame.pack_forget()

        self.about_frame.pack_forget()

    def show_about(self):
        self.about_frame.pack()  # 当点击关于时,进行布局的显示
        self.insert_frame.pack_forget()
        self.delete_frame.pack_forget()
        self.chang_frame.pack_forget()
        self.search_frame.pack_forget()


if __name__ == '__main__':
    root = tk.Tk()
    MainPage(root)
    root.mainloop()

 

3.views.py

"""
封装MainPage中的frame对象
"""
import tkinter as tk


class AboutFrame(tk.Frame):
    def __init__(self, root):
        # 继承
        super().__init__(root)
        tk.Label(self, text='关于作品:关于本作品由tkinter制作').pack()
        tk.Label(self, text='关于制作:关于本作品由tkinter制作').pack()


class ChangeFrame(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        tk.Label(self, text='修改页面').pack()


class InsertFrame(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        tk.Label(self, text='插入页面').pack()


class SearchFram(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        tk.Label(self, text='查询页面').pack()

class DeleteFrame(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        tk.Label(self, text='删除页面').pack()

 

4.db.py

"""模型层"""
import json


class MysqlDatabases:
    def __init__(self):
        # 加载数据:读取文件
        with open('users.json', mode='r', encoding='utf-8') as f:
            text = f.read()
        self.users = json.loads(text)

    def check_login(self, username, password):
        for user in self.users:
            if username == user['username']:
                if password == user['password']:
                    return True, '登录成功'
                else:
                    return False, '登录失败,密码错误'
            else:
                return False, '登录失败,用户不存在'


db = MysqlDatabases()
if __name__ == '__main__':
    print(db.check_login('admin', '123456'))

 

5.users.json

[
  {"username":  "admin", "password":  "123456"}
]

 

6.students.json

[
  {"name":  "张三", "math": "65", "chinese":  "75", "english":  "100"},
  {"name":  "李四", "math": "75", "chinese":  "95", "english":  "91"},
  {"name":  "王五", "math": "99", "chinese":  "85", "english":  "83"}
]

 

7.效果

 

 

 

标签:__,管理系统,python,self,笔记,tk,root,frame,pack
From: https://www.cnblogs.com/hmy22466/p/17404106.html

相关文章

  • Python多线程并发通用模板
    多线程可以同时处理多个任务,支持并发处理,从而提高系统的并发能力。多线程爬虫的好处主要有提高爬取效率、提高稳定性、节省资源等。总之,多线程爬虫可以提高爬取效率、稳定性和资源利用率,是一种更加高效、可靠的爬虫实现方式。多线程爬虫并行可以提高爬虫的效率,具体实现方法如下:......
  • Python_报错:curl: (7) Failed to connect to raw.githubusercontent.com port 443: Op
    解决:https://blog.csdn.net/Jimmmyking/article/details/126105788作为mac的用户,如果你还没安装Homebrew那真的就太遗憾了,应为其真的很好用,然后安装Homebrew有时候有不是那么简单,会出现很多奇奇怪怪的错误,如下是我本人第一次安装就成功,其重要用的是中科大的brew主体,使用这个只需......
  • Python金融应用编程:衍生品定价和套期保值的随机过程|附代码数据
    全文链接:http://tecdat.cn/?p=5620最近我们被客户要求撰写关于金融应用编程的研究报告,包括一些图形和统计输出。在本文中随机过程对定量融资的许多方面都很有用,包括但不限于衍生品定价,风险管理和投资管理这些应用程序将在本文后面进一步详细讨论。本节介绍了量化融资中使用的一......
  • python 中 pyfaidx 模块统计fasta文件每一条染色体的长度
     001、python版本和pip版本a、python版本[root@PC1pip]#python--versionPython3.11.3 b、pip版本[[email protected]]#pip--versionpip23.1.2from/usr/local/lib/python3.11/site-packages/pip(python3.11) 002、利用pip安装 pyfaidx模块......
  • ERROR: Command errored out with exit status 1: python setup.py egg_info Check th
     001、在利用python2.7环境下利用pip安装pyfaidx模块时报如下错误:ERROR:Commanderroredoutwithexitstatus1:pythonsetup.pyegg_infoCheckthelogsforfullcommandoutput. 002、查看pip版本[root@PC1pip]#pip--versionpip20.3.4from/usr/lib/pyth......
  • 离线安装python模块
    安装环境32位win7电脑+python3.7.5模块来源(1)https://www.lfd.uci.edu/~gohlke/pythonlibs(2)https://pypi.org/安装numpy-1.21.6——直接安装pandas-1.3.5——所需支持:numpy-1.21.6,cython-0.29.30,six-1.16.0,python-dateutil-2.8.2,pytz2023.3matplotlib-2.2.5——所需支持:n......
  • Python_mac在编辑~/.bash_profile文件时,导致所有命令都不能用了
    原因:~/.bash_profile文件改坏了操作:1.在终端输入exportPATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin",命令暂时可以用了2.在终端输入open-e~/.bash_profile在文本编辑器里面打开.bash_profile文件3.检查修改配置文件问题,然后保存,由于本人是bas......
  • 学习笔记
    绕过cdn的集中常见方法:1.子域名查询:有的时候主站会做CDN服务而子站是没有做CDN服务,所以通过访问子站可以直接找到子站1地址。而子站的io地址是有可能和主站ip相同或在同一网段的,所以可以作为一个很好的参考。(网上会有子域名查询工具)2.邮件服务查询:邮箱基本都是内部人员在访问......
  • C基础笔记(字符串)
    字符串strlen计算字符串长度:strlen(s1);返回字符串s1的长度。strcat字符串相连: strcat(s1,s2);  连接字符串s2到字符串s1的末尾。strcmp字符串比较    strcmp(s1,s2);如果s1和s2是相同的,则返回1;如果s1<s2则返回小于0;如......
  • Python数据库篇:sqlite3、mysql、sqlalchemy
    一:sqlite3importsqlite3conn=sqlite3.connect("test.db")cursor=conn.cursor()cursor.execute("createtableuser(idvarchar(20)primarykey,namevarchar(20))")cursor.execute("insertintouser(id,name)values(\'1\�......