班级信息收集

`import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3

class ClassInfoApp:
def init(self, root):
self.root = root
self.root.title("班级信息收集系统")
self.root.geometry("600x450")
self.root.resizable(False, False)

创建数据库连接

self.conn = sqlite3.connect("class_info.db")
self.create_table()

创建主框架

self.main_frame = ttk.Frame(root, padding="20")
self.main_frame.pack(fill=tk.BOTH, expand=True)

创建标签页

self.tab_control = ttk.Notebook(self.main_frame)

注册页面

self.register_tab = ttk.Frame(self.tab_control)
self.tab_control.add(self.register_tab, text="注册信息")
self.create_register_tab()

查询页面

self.query_tab = ttk.Frame(self.tab_control)
self.tab_control.add(self.query_tab, text="查询信息")
self.create_query_tab()

self.tab_control.pack(expand=1, fill="both")

底部状态栏

self.status_var = tk.StringVar()
self.status_var.set("就绪")
self.status_bar = ttk.Label(root, textvariable=self.status_var, relief=tk.SUNKEN, anchor=tk.W)
self.status_bar.pack(side=tk.BOTTOM, fill=tk.X)

def create_table(self):
"""创建数据库表"""
with self.conn:
cursor = self.conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS class_info (
student_id TEXT PRIMARY KEY,
class_name TEXT NOT NULL,
name TEXT NOT NULL
)
''')

def create_register_tab(self):
"""创建注册页面"""
# 标题
ttk.Label(self.register_tab, text="学生信息注册", font=("Arial", 14, "bold")).grid(row=0, column=0, columnspan=2, pady=10)

学号

ttk.Label(self.register_tab, text="学号:").grid(row=1, column=0, sticky=tk.W, pady=5)
self.student_id_var = tk.StringVar()
ttk.Entry(self.register_tab, textvariable=self.student_id_var, width=30).grid(row=1, column=1, pady=5)

班级

ttk.Label(self.register_tab, text="班级:").grid(row=2, column=0, sticky=tk.W, pady=5)
self.class_name_var = tk.StringVar()
ttk.Entry(self.register_tab, textvariable=self.class_name_var, width=30).grid(row=2, column=1, pady=5)

姓名

ttk.Label(self.register_tab, text="姓名:").grid(row=3, column=0, sticky=tk.W, pady=5)
self.name_var = tk.StringVar()
ttk.Entry(self.register_tab, textvariable=self.name_var, width=30).grid(row=3, column=1, pady=5)

注册按钮

register_btn = ttk.Button(self.register_tab, text="注册", command=self.register_student)
register_btn.grid(row=4, column=0, columnspan=2, pady=20)

状态标签

self.register_status_var = tk.StringVar()
ttk.Label(self.register_tab, textvariable=self.register_status_var, foreground="green").grid(row=5, column=0, columnspan=2)

def create_query_tab(self):
"""创建查询页面"""
# 标题
ttk.Label(self.query_tab, text="班级同学信息查询", font=("Arial", 14, "bold")).grid(row=0, column=0, columnspan=3, pady=10)

查询条件

ttk.Label(self.query_tab, text="按班级查询:").grid(row=1, column=0, sticky=tk.W, pady=5)
self.query_class_var = tk.StringVar()
ttk.Entry(self.query_tab, textvariable=self.query_class_var, width=20).grid(row=1, column=1, pady=5)

查询按钮

query_btn = ttk.Button(self.query_tab, text="查询", command=self.query_students)
query_btn.grid(row=1, column=2, padx=10)

结果表格

columns = ("学号", "班级", "姓名")
self.tree = ttk.Treeview(self.query_tab, columns=columns, show="headings")

for col in columns:
self.tree.heading(col, text=col)
self.tree.column(col, width=150, anchor=tk.CENTER)

self.tree.grid(row=2, column=0, columnspan=3, pady=10, sticky=(tk.N, tk.S, tk.W, tk.E))

滚动条

scrollbar = ttk.Scrollbar(self.query_tab, orient=tk.VERTICAL, command=self.tree.yview)
self.tree.configure(yscroll=scrollbar.set)
scrollbar.grid(row=2, column=3, sticky=(tk.N, tk.S))

设置列宽和行高

self.query_tab.grid_columnconfigure(0, weight=1)
self.query_tab.grid_columnconfigure(1, weight=1)
self.query_tab.grid_columnconfigure(2, weight=1)
self.query_tab.grid_rowconfigure(2, weight=1)

def register_student(self):
"""注册学生信息"""
student_id = self.student_id_var.get().strip()
class_name = self.class_name_var.get().strip()
name = self.name_var.get().strip()

if not student_id or not class_name or not name:
messagebox.showerror("错误", "请填写完整的学生信息!")
return

try:
with self.conn:
cursor = self.conn.cursor()
cursor.execute(
"INSERT INTO class_info (student_id, class_name, name) VALUES (?, ?, ?)",
(student_id, class_name, name)
)
self.register_status_var.set(f"学生 {name} (学号: {student_id}) 注册成功!")
self.status_var.set(f"注册成功: {name} ({student_id})")

清空输入框

self.student_id_var.set("")
self.class_name_var.set("")
self.name_var.set("")

except sqlite3.IntegrityError:
messagebox.showerror("错误", f"学号 {student_id} 已存在!")
self.register_status_var.set("")

def query_students(self):
"""查询班级学生信息"""
class_name = self.query_class_var.get().strip()

if not class_name:
messagebox.showerror("错误", "请输入要查询的班级!")
return

清空表格

for item in self.tree.get_children():
self.tree.delete(item)

try:
with self.conn:
cursor = self.conn.cursor()
cursor.execute(
"SELECT student_id, class_name, name FROM class_info WHERE class_name = ? ORDER BY student_id",
(class_name,)
)
students = cursor.fetchall()

if not students:
messagebox.showinfo("提示", f"未找到班级 {class_name} 的学生信息!")
self.status_var.set(f"查询班级: {class_name} (未找到记录)")
return

填充表格

for student in students:
self.tree.insert("", tk.END, values=student)

self.status_var.set(f"查询成功: {len(students)} 条记录")

except Exception as e:
messagebox.showerror("错误", f"查询失败: {str(e)}")
self.status_var.set("查询失败")

if name == "main":
root = tk.Tk()
app = ClassInfoApp(root)
root.mainloop() `

posted @ 2025-06-21 18:32  ouyeye  阅读(45)  评论(0)    收藏  举报