# -*-coding:utf-8-*-
from tkinter import *
import sqlite3
import tkinter.messagebox as messagebox
from tkinter import ttk
class MainPage:
"""主界面"""
def __init__(self, master=None):
self.root = master
self.root.title("Python员工信息管理系统")
self.root.geometry('800x420')
self.conn = sqlite3.connect('data/data.db')
# 实例化Frame (创建)
self.frm1 = Frame(self.root)
self.frm2 = Frame(self.root)
self.frm3 = Frame(self.root)
self.frm4 = Frame(self.root)
self.frm5 = Frame(self.root)
self.frm6 = Frame(self.root)
self.frm7 = Frame(self.root)
# self.frm8 = Frame(self.root)
# self.frm9 = Frame(self.root)
self.createpage()
def createpage(self):
"""创建界面"""
menu = Menu(self.root)
self.root.config(menu=menu)
self.frm1.config(height=350, width=600, bg='grey')
# Label(self.frm1, text='frm1').place(in_=self.frm1, anchor=NW)
self.frm1.place(x=180, y=50)
self.frm2.config(height=350, width=150, bg='grey')
# Label(self.frm2, text='frm2').place(anchor=NW)
self.frm2.place(x=20, y=50)
self.frm3.config(bg='grey', height=40, width=760)
# Label(self.frm3, text='frm3').place(in_=self.frm3, anchor=NW)
self.frm3.place(x=20, y=5)
# frm3
Label(self.frm3, text='Python员工信息管理系统', font='Verdana 10 bold').place(x=300, y=8)
# Button(self.frm3, text='操作指南', command=self.instructions).place(x=650, y=8)
# frm2
Button(self.frm2, text='添加员工', command=self.create_employees).place(x=20, y=20, width=100)
Button(self.frm2, text='显示员工', command=self.show_employees).place(x=20, y=70, width=100)
Button(self.frm2, text='修改信息', command=self.change_employees).place(x=20, y=120, width=100)
Button(self.frm2, text='查询员工', command=self.search_employees).place(x=20, y=170, width=100)
# frm1
Label(self.frm1, text='Python员工管理系统',
fg='red', font='Verdana 10 bold').place(x=100, y=50, height=80, width=400)
Button(self.frm1, text='1', height=1, width=1).place(x=450, y=450)
Button(self.frm1, text='2', height=1, width=1).place(x=490, y=450)
Button(self.frm1, text='3', height=1, width=1).place(x=530, y=450)
def create_employees(self):
"""添加员工"""
def create():
"""添加按钮触发的录入数据库动作"""
curs = self.conn.cursor()
query = 'insert into employees values (?,?,?)'
val = [username.get(), int(age.get()), float(salary.get())]
try:
curs.execute(query, val)
self.conn.commit()
messagebox.showinfo("成功", "员工信息添加成功")
except sqlite3.IntegrityError:
messagebox.showerror("失败", "员工已存在")
self.frm1.place_forget()
self.frm5.place_forget()
self.frm6.place_forget()
self.frm7.place_forget()
# self.frm8.place_forget()
# self.frm9.place_forget()
self.frm4.config(height=350, width=600, bg='grey')
self.frm4.place(x=180, y=50)
# Label(self.frm4, text='frm4').place(anchor=NW)
Label(self.frm4, text='添加员工',
font='Verdana 10 bold').place(x=150, y=10, height=30, width=300)
# 用于与Entry的textvariable绑定 方便获取值
username = StringVar()
age = StringVar()
salary = StringVar()
# 文本和输入框
Label(self.frm4, text="姓名:").place(x=130, y=100, height=30, width=30)
Entry(self.frm4, textvariable=username).place(x=170, y=100, height=30, width=300)
Label(self.frm4, text="年龄:").place(x=130, y=140, height=30, width=30)
Entry(self.frm4, textvariable=age).place(x=170, y=140, height=30, width=300)
Label(self.frm4, text="工资:").place(x=130, y=180, height=30, width=30)
Entry(self.frm4, textvariable=salary).place(x=170, y=180, height=30, width=300)
# 按钮
Button(self.frm4, text='添加', height=1, width=10, command=create).place(x=380, y=230)
def show_employees(self):
"""显示员工"""
self.frm1.place_forget()
self.frm4.place_forget()
self.frm6.place_forget()
self.frm7.place_forget()
# self.frm8.place_forget()
# self.frm9.place_forget()
self.frm5.config(height=350, width=600, bg='grey')
self.frm5.place(x=180, y=50)
# Label(self.frm5, text='frm5').place(anchor=NW)
Label(self.frm5, text='显示员工',
font='Verdana 10 bold').place(x=150, y=10, height=30, width=300)
# 表头和表身
table_frm = Frame(self.frm5)
table_frm.config(height=350, width=300)
table_frm.place(x=50, y=60)
tree = ttk.Treeview(table_frm, show="headings", height=10, columns=("num", "name", "age", "salary"))
vbar = ttk.Scrollbar(table_frm, orient=VERTICAL, command=tree.yview)
# 定义树形结构与滚动条
tree.configure(yscrollcommand=vbar.set)
# 表格的标题
tree.column("num", width=60, anchor="center")
tree.column("name", width=140, anchor="center")
tree.column("age", width=140, anchor="center")
tree.column("salary", width=140, anchor="center")
tree.heading("num", text="序号")
tree.heading("name", text="姓名")
tree.heading("age", text="年龄")
tree.heading("salary", text="工资")
tree.grid(row=0, column=0, sticky=NSEW)
vbar.grid(row=0, column=1, sticky=NS)
self.delButton(tree)
c = self.returnData()
self.insertTree(tree, c)
Button(self.frm5, text='删除员工', height=1, width=12, command=lambda: self.delEmployees(tree)).place(x=50, y=300)
Button(self.frm5, text='按年龄排序(升)', height=1, width=12, command=lambda: self.AgeSort(tree)).place(x=150, y=300)
Button(self.frm5, text='按年龄排序(降)', height=1, width=12, command=lambda: self.AgeSortDesc(tree)).place(x=250, y=300)
Button(self.frm5, text='按工资排序(升)', height=1, width=12, command=lambda: self.SalarySort(tree)).place(x=350, y=300)
Button(self.frm5, text='按工资排序(降)', height=1, width=12, command=lambda: self.SalarySortDesc(tree)).place(x=450, y=300)
def change_employees(self):
"""修改员工信息"""
def change():
curs = self.conn.cursor()
# 判断员工是否存在
q = "SELECT username from employees WHERE username='%s'" % username.get()
curs.execute(q)
c = curs.fetchall()
if len(c) == 0:
messagebox.showerror('失败', "员工不存在")
return
# 修改员工信息
try:
query = "UPDATE employees SET age=%d, salary=%f WHERE username='%s'" % (int(age.get()), float(salary.get()), username.get())
curs.execute(query)
self.conn.commit()
messagebox.showinfo("成功", "员工信息修改成功")
except:
messagebox.showerror("失败", "信息有误")
self.frm1.place_forget()
self.frm5.place_forget()
self.frm4.place_forget()
self.frm7.place_forget()
# self.frm8.place_forget()
# self.frm9.place_forget()
self.frm6.config(height=350, width=600, bg='grey')
self.frm6.place(x=180, y=50)
# Label(self.frm6, text='frm6').place(anchor=NW)
Label(self.frm6, text='修改信息',
font='Verdana 10 bold').place(x=150, y=10, height=30, width=300)
username = StringVar()
age = StringVar()
salary = StringVar()
# 文本和输入框
Label(
评论0