登陆页
"""
使用Tkinter实现学生管理系统
面向对象编程
"""
from ttkbootstrap.dialogs import MessageDialog # 对话框模块
from db import db # 数据模块
import ttkbootstrap as ttk # 导入ttkbootstrap
from ttkbootstrap.constants import *
from MainPage import MainPage # 主页
class LoginPage(ttk.Frame):
"""登陆页Frame"""
def __init__(self, master: ttk.Window): # master: ttk.Window 标注master对象类型
self.root = master # 初始化窗口
self.root.title('登陆页') # 设置标题
self.root.resizable(False, False) # 设置窗口大小不可变
super().__init__(self.root, padding=(100, 50)) # 父类初始化
self.pack(fill=BOTH, expand=YES) # 设置位置
self.username = ttk.StringVar(value="admin")
self.password = ttk.StringVar(value="") # ttk内部类型变量
self.create_form_entry("用户名:", self.username) # 创建输入控件
self.create_form_entry("密码:", self.password)
self.create_buttonbox() # 创建按钮
def create_form_entry(self, label, variable):
"""创建输入表单"""
container = ttk.Frame(self) # 实例化容器
container.pack(fill=X, expand=YES, pady=5) # 控件布局
lbl = ttk.Label(master=container, text=label, width=10)
lbl.pack(side=LEFT, padx=5)
ent = ttk.Entry(master=container, textvariable=variable)
ent.pack(side=LEFT, padx=5, fill=X, expand=YES)
def create_buttonbox(self):
"""创建按钮"""
container = ttk.Frame(self)
container.pack(fill=X, expand=YES, pady=(15, 10))
sub_btn = ttk.Button(
master=container,
text="提交",
command=self.on_submit,
bootstyle=SUCCESS,
width=6,
)
sub_btn.pack(side=RIGHT, padx=5)
sub_btn.focus_set()
cnl_btn = ttk.Button(
master=container,
text="取消",
command=self.on_cancel,
bootstyle=DANGER,
width=6,
)
cnl_btn.pack(side=RIGHT, padx=5)
def on_submit(self):
flag, message = db.check_login(self.username.get(), self.password.get()) # 标志,提示信息
if flag:
self.destroy() # 销毁登陆页Frame
MainPage(self.root)
else:
self.show_error(message, title=' ', parent=None, alert=True) # 展示错误对话框
def on_cancel(self):
"""关闭应用"""
self.quit()
def show_error(self, message, title="", parent=None, alert=True):
dialog = MessageDialog(
message=message, # 提示信息
title=title, # 标题
parent=parent,
buttons=["OK:primary"], # 确认按钮
icon='img/img.png', # 图标
alert=alert,
localize=True,
)
dialog.show()
if __name__ == '__main__':
root = ttk.Window(themename="superhero", iconphoto='img/2.png') # 实例化root窗口对象
LoginPage(mast