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