Python Tkinter MySQL 学生信息管理系统
import tkinter as tk import mysql.connector from tkinter import messagebox
class LoginWindow: def init(self, master): self.master = master master.title('Login') master.geometry('300x150')
self.label_username = tk.Label(master, text='Username:')
self.label_username.pack()
self.entry_username = tk.Entry(master)
self.entry_username.pack()
self.label_password = tk.Label(master, text='Password:')
self.label_password.pack()
self.entry_password = tk.Entry(master, show='*')
self.entry_password.pack()
self.button_login = tk.Button(master, text='Login', command=self.login)
self.button_login.pack()
def login(self):
username = self.entry_username.get()
password = self.entry_password.get()
# 连接MySQL数据库
try:
self.conn = mysql.connector.connect(
host='localhost',
user='root',
password='844133',
database='oyy', auth_plugin='mysql_native_password'
)
self.master.destroy()
MainWindow(self.conn)
except:
tk.messagebox.showerror('Error', 'Invalid username or password')
class MainWindow: def init(self, conn): self.conn = conn self.cursor = conn.cursor()
self.master = tk.Tk()
self.master.title('查询界面')
self.master.geometry('400x300')
self.label_name = tk.Label(self.master, text='Enter student name:')
self.label_name.pack()
self.entry_name = tk.Entry(self.master)
self.entry_name.pack()
self.button_search = tk.Button(self.master, text='Search', command=self.search)
self.button_search.pack()
self.label_result = tk.Label(self.master, text='')
self.label_result.pack()
# 菜单栏
self.menu_bar = tk.Menu(self.master)
self.file_menu = tk.Menu(self.menu_bar, tearoff=0)
self.file_menu.add_command(label='录入信息', command=self.add_window)
self.file_menu.add_command(label='删除信息', command=self.delete_window)
self.file_menu.add_command(label='修改信息', command=self.update_window)
self.menu_bar.add_cascade(label='菜单', menu=self.file_menu)
self.master.config(menu=self.menu_bar)
def search(self):
name = self.entry_name.get()
# 查询学生信息
query = 'SELECT * FROM student WHERE name=%s'
self.cursor.execute(query, (name,))
result = self.cursor.fetchone()
if result:
id, name, age, gender, score = result
self.label_result.config(text=f'Name: {name}\Age: {age}\gender: {gender}\score: {score}')
else:
self.label_result.config(text='No result found')
def add_window(self):
AddWindow(self.conn)
def delete_window(self):
DeleteWindow(self.conn)
def update_window(self):
UpdateWindow(self.conn)
class AddWindow: def init(self, conn): self.conn = conn self.cursor = conn.cursor()
self.master = tk.Toplevel()
self.master.title('增加界面')
self.master.geometry('400x300')
self.label_name = tk.Label(self.master, text='姓名:')
self.label_name.pack()
self.entry_name = tk.Entry(self.master)
self.entry_name.pack()
self.label_age = tk.Label(self.master, text='年龄:')
self.label_age.pack()
self.entry_age = tk.Entry(self.master)
self.entry_age.pack()
self.label_id = tk.Label(self.master, text='性别:')
self.label_id.pack()
self.entry_id = tk.Entry(self.master)
self.entry_id.pack()
self.label_math = tk.Label(self.master, text='成绩:')
self.label_math.pack()
self.entry_math = tk.Entry(self.master)
self.entry_math.pack()
self.button_add = tk.Button(self.master, text='add', command=self.add_student)
self.button_add.pack()
def add_student(self):
name = self.entry_name.get()
age = self.entry_age.get()
gender = self.entry_id.get()
score = self.entry_math.get()
# 插入学生信息到数据库
add_student = 'INSERT INTO student (name, age, gender, score) VALUES (%s, %s, %s, %s)'
data_student = (name, age, gender, score)
self.cursor.execute(add_student, data_student)
self.conn.commit()
self.cursor.close()
self.conn.close()
tk.messagebox.showinfo('ok', '添加成功')
# 清空用户输入的数据
self.entry_name.delete(0, tk.END)
self.entry_age.delete(0, tk.END)
self.entry_id.delete(0, tk.END)
self.entry_math.delete(0, tk.END)
def exit(self):
self.master.destroy()
class DeleteWindow: def init(self, conn): self.conn = conn self.cursor = conn.cursor()
self.master = tk.Toplevel()
self.master.title('删除界面')
self.master.geometry('400x300')
self.label_name = tk.Label(self.master, text='姓名:')
self.label_name.pack()
self.entry_name = tk.Entry(self.master)
self.entry_name.pack()
self.button_delete = tk.Button(self.master, text='delete', command=self.delete_student)
self.button_delete.pack()
def delete_student(self):
name = self.entry_name.get()
# 删除学生信息
delete_student = 'DELETE FROM student WHERE name=%s'
self.cursor.execute(delete_student, (name,))
self.conn.commit()
self.cursor.close()
self.conn.close()
tk.messagebox.showinfo('ok', '删除成功')
# 清空用户输入的数据
self.entry_name.delete(0, tk.END)
def exit(self):
self.master.destroy()
class UpdateWindow: def init(self, conn): self.conn = conn self.cursor = conn.cursor()
self.master = tk.Toplevel()
self.master.title('修改界面')
self.master.geometry('400x300')
self.label_name = tk.Label(self.master, text='姓名:')
self.label_name.pack()
self.entry_name = tk.Entry(self.master)
self.entry_name.pack()
self.label_age = tk.Label(self.master, text='年龄:')
self.label_age.pack()
self.entry_age = tk.Entry(self.master)
self.entry_age.pack()
self.label_id = tk.Label(self.master, text='性别:')
self.label_id.pack()
self.entry_id = tk.Entry(self.master)
self.entry_id.pack()
self.label_math = tk.Label(self.master, text='成绩:')
self.label_math.pack()
self.entry_math = tk.Entry(self.master)
self.entry_math.pack()
self.button_update = tk.Button(self.master, text='update', command=self.update_student)
self.button_update.pack()
def update_student(self):
name = self.entry_name.get()
age = self.entry_age.get()
gender = self.entry_id.get()
score = self.entry_math.get()
# 更新学生信息
update_student = 'UPDATE student SET age=%s, gender=%s, score=%s WHERE name=%s'
data_student = (age, gender, score, name)
self.cursor.execute(update_student, data_student)
self.conn.commit()
self.cursor.close()
self.conn.close()
tk.messagebox.showinfo('ok', '修改成功')
# 清空用户输入的数据
self.entry_name.delete(0, tk.END)
self.entry_age.delete(0, tk.END)
self.entry_id.delete(0, tk.END)
self.entry_math.delete(0, tk.END)
def exit(self):
self.master.destroy()
if name == 'main': root = tk.Tk() login_window = LoginWindow(root) root.mainloop()
原文地址: https://www.cveoy.top/t/topic/ooVv 著作权归作者所有。请勿转载和采集!