You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
test2/练习三.py

276 lines
11 KiB

import tkinter as tk
from tkinter import messagebox, ttk
import pymysql
class MasterChargeSystem(tk.Tk):
def __init__(self):
super().__init__()
self.login_frame = None
self.register_frame = None
self.comment_frame = None
self.create_login_window()
def register_database(self, username, password):
with pymysql.connect(host='localhost', user='root', password='123456', database='mynewdb') as connection:
cursor = connection.cursor()
sql = "INSERT INTO user1(username, password) VALUES (%s, %s)"
cursor.execute(sql, (username, password))
connection.commit()
def login(self):
username = self.username_entry.get().strip()
password = self.password_entry.get().strip()
with pymysql.connect(host='localhost', user='root', password='123456', database='mynewdb') as connection:
cursor = connection.cursor()
sql = "SELECT password FROM user1 WHERE username = %s"
cursor.execute(sql, (username,))
result = cursor.fetchone()
if result:
stored_password = result[0]
if stored_password == password:
messagebox.showinfo("登录", "登陆成功")
self.show_main_window()
else:
messagebox.showerror("登录", "用户名或密码错误")
else:
messagebox.showerror("登录", "用户名不存在")
def register(self):
username = self.username_entry.get().strip()
password = self.password_entry.get().strip()
confirm_password = self.confirm_password_entry.get().strip()
if username and password:
if password == confirm_password:
self.register_database(username, password)
messagebox.showinfo("注册", "注册成功")
self.create_login_window()
else:
messagebox.showerror("注册", "两次输入的密码不匹配")
else:
messagebox.showerror("注册", "用户名或密码为空")
def show_main_window(self):
if self.login_frame:
self.login_frame.pack_forget()
if self.comment_frame:
self.comment_frame.pack_forget()
self.title("考研信息系统")
self.attributes('-fullscreen', True)
self.main_frame = tk.Frame(self)
self.main_frame.pack(fill=tk.BOTH, expand=True, padx=50, pady=50)
main_label = tk.Label(self.main_frame, text="欢迎来到考研信息系统!")
main_label.pack(pady=10)
# 添加搜索框
search_frame = tk.Frame(self.main_frame)
search_frame.pack(pady=10)
search_label = tk.Label(search_frame, text="搜索:")
search_label.pack(side=tk.LEFT)
self.search1_entry = tk.Entry(search_frame)
self.search1_entry.pack(side=tk.LEFT, padx=5)
self.search2_entry = ttk.Combobox(search_frame, values=['1', '2'])
self.search2_entry.pack(side=tk.LEFT, padx=5)
affirm_button = tk.Button(search_frame, text="确认", command=self.search_data)
affirm_button.pack(side=tk.RIGHT)
try:
with pymysql.connect(host='localhost', user='root', password='123456', database='mynewdb') as connection:
cursor = connection.cursor()
cursor.execute("SELECT * FROM universities_beijing")
# 创建一个用于 Treeview 和滚动条的框架
tree_frame = tk.Frame(self.main_frame)
tree_frame.pack(fill=tk.BOTH, expand=True)
self.tree = ttk.Treeview(tree_frame)
self.vertical_scrollbar = ttk.Scrollbar(tree_frame, orient=tk.VERTICAL, command=self.tree.yview)
self.tree.configure(yscrollcommand=self.vertical_scrollbar.set)
# 获取列名
cursor.execute("SELECT * FROM universities_beijing LIMIT 0")
self.columns = [description[0] for description in cursor.description]
# 获取数据
cursor.execute("SELECT * FROM universities_beijing")
self.data = cursor.fetchall()
# 设置列
self.tree['columns'] = self.columns
self.tree.column("#0", width=0, stretch=tk.NO) # 隐藏第一个空列
# 动态设置列和列名
for column in self.columns:
self.tree.column(column, anchor=tk.W, width=100, stretch=tk.YES)
self.tree.heading(column, text=column, anchor=tk.W)
self.tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
self.vertical_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
# 插入数据
for row in self.data:
self.tree.insert("", tk.END, values=row)
# 绑定点击事件
self.tree.bind("<Double-1>", self.show_university_details)
except pymysql.Error as err:
messagebox.showerror("数据库错误", str(err))
exit_button = tk.Button(self.main_frame, text="退出", command=self.quit)
exit_button.pack(pady=10)
comment_button = tk.Button(self.main_frame, text="评论", command=self.comment)
comment_button.pack(pady=10)
def show_university_details(self, event):
selected_item = self.tree.selection()[0] # 获取选中的行
university_data = self.tree.item(selected_item, 'values') # 获取行数据
if university_data:
self.detail_window = tk.Toplevel(self) # 创建新窗口
self.detail_window.title("大学详细信息")
self.detail_window.geometry("400x300")
# 显示大学的其他信息
detail_label = tk.Label(self.detail_window, text=f"大学名称: {university_data[0]}") # Assuming first column is name
detail_label.pack(pady=10)
additional_info = f"其他信息:\n" # Here you can add more info as needed.
additional_info_label = tk.Label(self.detail_window, text=additional_info)
additional_info_label.pack(pady=10)
# 添加评论框
comment_label = tk.Label(self.detail_window, text="添加评论:")
comment_label.pack(pady=10)
self.comment_entry = tk.Entry(self.detail_window)
self.comment_entry.pack(pady=5)
submit_comment_button = tk.Button(self.detail_window, text="提交评论", command=lambda: self.submit_comment(university_data[0]))
submit_comment_button.pack(pady=10)
self.detail_window.protocol("WM_DELETE_WINDOW", self.detail_window.destroy)
def submit_comment(self, university_name):
comment = self.comment_entry.get()
if comment:
# Store comment in the database (add your SQL query here)
with pymysql.connect(host='localhost', user='root', password='123456', database='mynewdb') as connection:
cursor = connection.cursor()
sql = "INSERT INTO comments (university_name, comment) VALUES (%s, %s)"
cursor.execute(sql, (university_name, comment))
connection.commit()
messagebox.showinfo("评论", "评论提交成功")
self.comment_entry.delete(0, tk.END) # 清空输入框
else:
messagebox.showerror("评论", "评论不能为空")
def comment(self):
if self.main_frame:
self.main_frame.pack_forget()
self.title("评论界面")
self.attributes('-fullscreen', True)
self.comment_frame = tk.Frame(self)
self.comment_frame.pack(fill=tk.BOTH, expand=True, padx=50, pady=50)
self.back_button = tk.Button(self.comment_frame, text="返回", command=self.show_main_window)
self.back_button.pack(pady=10)
def search_data(self):
search_term = self.search1_entry.get() # Fixed to use the correct entry
# 清空当前Treeview
self.tree.delete(*self.tree.get_children())
# 重新插入符合搜索条件的数据
for row in self.data:
if any(search_term in str(value).lower() for value in row):
self.tree.insert("", tk.END, values=row)
def show_register_window(self):
if self.login_frame:
self.login_frame.pack_forget()
self.title("用户注册界面")
sw = self.winfo_screenwidth()
sh = self.winfo_screenheight()
Width = 400
Height = 300
cen_x = (sw - Width) / 2
cen_y = (sh - Height) / 2
self.geometry('%dx%d+%d+%d' % (Width, Height, cen_x, cen_y))
self.register_frame = tk.Frame(self)
self.register_frame.pack(padx=20, pady=20)
self.username_label = tk.Label(self.register_frame, text="用户名:")
self.username_label.grid(row=0, column=0)
self.username_entry = tk.Entry(self.register_frame)
self.username_entry.grid(row=0, column=1)
self.password_label = tk.Label(self.register_frame, text="密码:")
self.password_label.grid(row=1, column=0)
self.password_entry = tk.Entry(self.register_frame, show="*")
self.password_entry.grid(row=1, column=1)
self.confirm_password_label = tk.Label(self.register_frame, text="确认密码:")
self.confirm_password_label.grid(row=2, column=0)
self.confirm_password_entry = tk.Entry(self.register_frame, show="*")
self.confirm_password_entry.grid(row=2, column=1)
self.register_button = tk.Button(self.register_frame, text="注册", command=self.register)
self.register_button.grid(row=3, columnspan=2, pady=10)
self.back_to_login_button = tk.Button(self.register_frame, text="返回登录", command=self.create_login_window)
self.back_to_login_button.grid(row=4, columnspan=2)
def create_login_window(self):
if self.register_frame:
self.register_frame.pack_forget()
if self.comment_frame:
self.comment_frame.pack_forget()
self.title("用户登录界面")
sw = self.winfo_screenwidth()
sh = self.winfo_screenheight()
Width = 400
Height = 300
cen_x = (sw - Width) / 2
cen_y = (sh - Height) / 2
self.geometry('%dx%d+%d+%d' % (Width, Height, cen_x, cen_y))
self.login_frame = tk.Frame(self)
self.login_frame.pack(padx=20, pady=20)
self.username_label = tk.Label(self.login_frame, text="用户名:")
self.username_label.grid(row=0, column=0)
self.username_entry = tk.Entry(self.login_frame)
self.username_entry.grid(row=0, column=1)
self.password_label = tk.Label(self.login_frame, text="密码:")
self.password_label.grid(row=1, column=0)
self.password_entry = tk.Entry(self.login_frame, show="*")
self.password_entry.grid(row=1, column=1)
self.login_button = tk.Button(self.login_frame, text="登录", command=self.login)
self.login_button.grid(row=2, columnspan=2, pady=10)
self.register_button = tk.Button(self.login_frame, text="注册", command=self.show_register_window)
self.register_button.grid(row=3, columnspan=2)
if __name__ == "__main__":
app = MasterChargeSystem()
app.mainloop()