5.16总结

import tkinter as tk
import random
import time
class MemoryTest:
def init(self, master):
self.master = master
self.master.title("记忆测试系统")
self.master.geometry("400x400")
self.level = tk.StringVar()
self.level.set("初级")
self.time_label = tk.Label(self.master, text="用时:0秒")
self.time_label.pack()
self.start_button = tk.Button(self.master, text="开始测试", command=self.start_test)
self.start_button.pack()
self.score_button = tk.Button(self.master, text="查看成绩", command=self.show_score)
self.score_button.pack()
self.level_menu = tk.OptionMenu(self.master, self.level, "初级", "中级", "高级")
self.level_menu.pack()
self.test_area = tk.Canvas(self.master, width=300, height=300)
self.test_area.pack()
self.icons = ["🍎", "🍌", "🍇", "🍉", "🍊", "🍓", "🍑", "🍍", "🥝", "🥑"]
self.icon_size = 50
self.num_rows = 6
self.num_cols = 6
self.selected_icon = None
self.selected_coords = []
self.visible_coords = []
self.hide_timer = None
self.scores = {"初级": [], "中级": [], "高级": []}
def start_test(self):
self.test_area.delete("all")
self.time_start = time.time()
if self.level.get() == "初级":
self.num_matches = 3
elif self.level.get() == "中级":
self.num_matches = 4
else:
self.num_matches = 5
self.icons_list = random.sample(self.icons, self.num_rows * self.num_cols // 2) * 2
random.shuffle(self.icons_list)
self.draw_board()
def draw_board(self):
self.test_area.delete("all")
for row in range(self.num_rows):
for col in range(self.num_cols):
x1 = col * self.icon_size
y1 = row * self.icon_size
x2 = x1 + self.icon_size
y2 = y1 + self.icon_size
coords = (row, col)
self.test_area.create_rectangle(x1, y1, x2, y2, fill="gray", tags="square")
self.test_area.create_text((x1 + x2) / 2, (y1 + y2) / 2, text=self.icons_list[row * self.num_cols + col], font=("Arial", 24), tags="icon", state="hidden")
self.test_area.tag_bind("square", "", lambda event, coords=coords: self.square_clicked(coords))
def square_clicked(self, coords):
if coords in self.visible_coords:
return
self.test_area.itemconfig(self.get_icon_id(coords), state="normal")
self.visible_coords.append(coords)
if self.selected_icon is None:
self.selected_icon = self.icons_list[coords[0] * self.num_cols + coords[1]]
self.selected_coords.append(coords)
elif self.selected_icon == self.icons_list[coords[0] * self.num_cols + coords[1]]:
self.selected_coords.append(coords)
if len(self.selected_coords) == self.num_matches:
self.save_score()
else:
self.hide_timer = self.master.after(1000, self.hide_icons)
def hide_icons(self):
for coords in self.selected_coords:
self.test_area.itemconfig(self.get_icon_id(coords), state="hidden")
self.selected_icon = None
self.selected_coords = []
self.hide_timer = None
def get_icon_id(self, coords):
return self.test_area.find_withtag("icon")[coords[0] * self.num_cols + coords[1]]
def save_score(self):
self.master.after_cancel(self.hide_timer)
self.test_area.delete("all")
self.time_label.config(text="用时:{:.1f}秒".format(time.time() - self.time_start))
score = time.time() - self.time_start
self.scores[self.level.get()].append(score)
save_dialog = tk.Toplevel(self.master)
save_dialog.title("保存成绩")
save_dialog.geometry("200x100")
save_label = tk.Label(save_dialog, text="是否保存成绩?")
save_label.pack()
save_button = tk.Button(save_dialog, text="保存", command=self.save_score_to_file)
save_button.pack()
cancel_button = tk.Button(save_dialog, text="取消", command=save_dialog.destroy)
cancel_button.pack()
def save_score_to_file(self):
with open("scores.txt", "a") as f:
f.write("{}级别:{:.1f}秒\n".format(self.level.get(), time.time() - self.time_start))
self.master.focus()
self.show_score()
def show_score(self):
score_dialog = tk.Toplevel(self.master)
score_dialog.title("成绩榜")
score_dialog.geometry("200x200")
level_label = tk.Label(score_dialog, text=self.level.get() + "记忆榜")
level_label.pack()
scores_listbox = tk.Listbox(score_dialog)
scores_listbox.pack()
for score in sorted(self.scores[self.level.get()]):
scores_listbox.insert("end", "{:.1f}秒".format(score))
root = tk.Tk()
app = MemoryTest(root)
root.mainloop()

该记忆测试系统使用了Python的Tkinter模块来创建GUI界面,包括菜单、按钮、标签、画布和对话框。在测试区域中,使用了Canvas来创建方块和图标,并通过tag_bind方法来绑定鼠标单击事件。在测试过程中,使用了计时器来记录用时,使用了列表来存储已经显示出来的图标和用户选中的方块,使用了after方法来实现图标隐藏的延迟效果。在保存成绩和查看成绩时,使用了Toplevel对话框和Listbox列表框来实现。最后,使用了文件来保存成绩。

posted @   奉禾  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示
主题色彩