feat: 添加
This commit is contained in:
commit
f7cf726877
3
.idea/.gitignore
generated
vendored
Normal file
3
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# 默认忽略的文件
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
10
.idea/TenSecondChallenge.iml
generated
Normal file
10
.idea/TenSecondChallenge.iml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.10 (TenSecondChallenge)" jdkType="Python SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
14
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
14
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredPackages">
|
||||||
|
<value>
|
||||||
|
<list size="1">
|
||||||
|
<item index="0" class="java.lang.String" itemvalue="numpy" />
|
||||||
|
</list>
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
||||||
10
.idea/material_theme_project_new.xml
generated
Normal file
10
.idea/material_theme_project_new.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="MaterialThemeProjectNewConfig">
|
||||||
|
<option name="metadata">
|
||||||
|
<MTProjectMetadataState>
|
||||||
|
<option name="userId" value="-e5ede7a:1972005fd59:-7ffa" />
|
||||||
|
</MTProjectMetadataState>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
10
.idea/misc.xml
generated
Normal file
10
.idea/misc.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.10 (TenSecondChallenge)" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (TenSecondChallenge)" project-jdk-type="Python SDK" />
|
||||||
|
<component name="PyCharmProfessionalAdvertiser">
|
||||||
|
<option name="shown" value="true" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/TenSecondChallenge.iml" filepath="$PROJECT_DIR$/.idea/TenSecondChallenge.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
7
README.md
Normal file
7
README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
```bash
|
||||||
|
pyinstaller -F -w -i icon.ico client.py
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip freeze > requirements.txt
|
||||||
|
```
|
||||||
152
app.py
Normal file
152
app.py
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
import tkinter as tk
|
||||||
|
from tkinter import messagebox, simpledialog
|
||||||
|
import time
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
|
# 排行榜文件名
|
||||||
|
LEADERBOARD_FILE = "leaderboard.json"
|
||||||
|
|
||||||
|
# 读取排行榜数据
|
||||||
|
def load_leaderboard():
|
||||||
|
if os.path.exists(LEADERBOARD_FILE):
|
||||||
|
try:
|
||||||
|
with open(LEADERBOARD_FILE, "r", encoding="utf-8") as f:
|
||||||
|
return json.load(f)
|
||||||
|
except:
|
||||||
|
return []
|
||||||
|
return []
|
||||||
|
|
||||||
|
# 保存排行榜数据
|
||||||
|
def save_leaderboard():
|
||||||
|
with open(LEADERBOARD_FILE, "w", encoding="utf-8") as f:
|
||||||
|
json.dump(leaderboard, f, ensure_ascii=False, indent=2)
|
||||||
|
|
||||||
|
# 获取参赛者姓名
|
||||||
|
def get_player_name():
|
||||||
|
name = simpledialog.askstring("参赛者姓名", "请输入您的姓名:")
|
||||||
|
if not name:
|
||||||
|
messagebox.showwarning("警告", "姓名不能为空,请重新输入。")
|
||||||
|
return get_player_name()
|
||||||
|
return name
|
||||||
|
|
||||||
|
# 更新排行榜(同名保留最小误差)
|
||||||
|
def update_leaderboard(name, error):
|
||||||
|
found = False
|
||||||
|
for i, (n, e) in enumerate(leaderboard):
|
||||||
|
if n == name:
|
||||||
|
found = True
|
||||||
|
if abs(error) < e:
|
||||||
|
leaderboard[i] = (name, abs(error))
|
||||||
|
break
|
||||||
|
if not found:
|
||||||
|
leaderboard.append((name, abs(error)))
|
||||||
|
|
||||||
|
leaderboard.sort(key=lambda x: x[1])
|
||||||
|
save_leaderboard() # 写入文件
|
||||||
|
|
||||||
|
# 更新显示
|
||||||
|
rank_listbox.delete(0, tk.END)
|
||||||
|
for i, (n, e) in enumerate(leaderboard[:], 1):
|
||||||
|
rank_listbox.insert(tk.END, f"{i}. {n:<8} 误差: {e:.3f}s")
|
||||||
|
|
||||||
|
# 更新时间函数
|
||||||
|
def update_time():
|
||||||
|
if flag:
|
||||||
|
now = time.time()
|
||||||
|
timex = now - start_time
|
||||||
|
timex_label.config(text=f"⏱ 时间:{timex:.3f} 秒")
|
||||||
|
root.after(10, update_time)
|
||||||
|
|
||||||
|
def show_win_animation():
|
||||||
|
anim = tk.Toplevel(root)
|
||||||
|
anim.geometry("320x200")
|
||||||
|
anim.title("🎉 胜利动画")
|
||||||
|
anim.configure(bg="#ffffff")
|
||||||
|
anim.attributes("-topmost", True) # 置顶显示
|
||||||
|
|
||||||
|
label = tk.Label(anim, text="🎉 完美掌控时间!🎉", font=("微软雅黑", 18, "bold"), bg="#ffffff")
|
||||||
|
label.pack(expand=True)
|
||||||
|
|
||||||
|
colors = ["#ff6666", "#66cc66", "#3399ff", "#ffcc00", "#cc66ff"]
|
||||||
|
sizes = [18, 22, 26, 30, 26, 22, 18]
|
||||||
|
|
||||||
|
def animate(i=0):
|
||||||
|
if i < len(sizes):
|
||||||
|
label.config(font=("微软雅黑", sizes[i], "bold"), fg=colors[i % len(colors)])
|
||||||
|
anim.after(150, animate, i + 1)
|
||||||
|
else:
|
||||||
|
anim.destroy()
|
||||||
|
|
||||||
|
animate()
|
||||||
|
|
||||||
|
|
||||||
|
# 控制开始/停止
|
||||||
|
def change():
|
||||||
|
global flag, start_time
|
||||||
|
|
||||||
|
if not flag:
|
||||||
|
flag = True
|
||||||
|
start_time = time.time()
|
||||||
|
update_time()
|
||||||
|
else:
|
||||||
|
flag = False
|
||||||
|
end_time = time.time()
|
||||||
|
timex = end_time - start_time
|
||||||
|
error = timex - 10
|
||||||
|
|
||||||
|
timex_label.config(text=f"✅ 实际时间:{timex:.3f} 秒\n误差:{error:.3f} 秒")
|
||||||
|
|
||||||
|
name = get_player_name()
|
||||||
|
update_leaderboard(name, error)
|
||||||
|
|
||||||
|
if abs(error) < 0.01:
|
||||||
|
show_win_animation()
|
||||||
|
else:
|
||||||
|
messagebox.showinfo("结果", "还差一点点,再接再厉吧!")
|
||||||
|
|
||||||
|
# ================================
|
||||||
|
# 主窗口
|
||||||
|
# ================================
|
||||||
|
|
||||||
|
leaderboard = load_leaderboard()
|
||||||
|
|
||||||
|
root = tk.Tk()
|
||||||
|
root.geometry("340x500")
|
||||||
|
root.title("10秒挑战")
|
||||||
|
root.configure(bg="#f0faff")
|
||||||
|
|
||||||
|
# 标题
|
||||||
|
title_label = tk.Label(root, text="🎯 10 秒挑战 🎯", font=("微软雅黑", 18, "bold"), fg="#004466", bg="#f0faff")
|
||||||
|
title_label.pack(pady=15)
|
||||||
|
|
||||||
|
# 排行榜框
|
||||||
|
rank_frame = tk.Frame(root, bg="#ffffff", bd=2, relief="groove")
|
||||||
|
rank_frame.pack(pady=10)
|
||||||
|
|
||||||
|
rank_title = tk.Label(rank_frame, text="🏆 排行榜(误差越小越靠前)", font=("微软雅黑", 10, "bold"), bg="#ffffff", fg="#333333")
|
||||||
|
rank_title.pack(pady=(5, 0))
|
||||||
|
|
||||||
|
rank_listbox = tk.Listbox(rank_frame, font=("Courier", 10), height=5, width=35, bg="#f9f9f9")
|
||||||
|
rank_listbox.pack(padx=10, pady=5)
|
||||||
|
|
||||||
|
# 初始显示排行榜
|
||||||
|
for i, (n, e) in enumerate(leaderboard[:5], 1):
|
||||||
|
rank_listbox.insert(tk.END, f"{i}. {n:<8} 误差: {e:.3f}s")
|
||||||
|
|
||||||
|
# 时间标签
|
||||||
|
timex_label = tk.Label(root, text="点击按钮开始挑战", font=("微软雅黑", 12), bg="#f0faff", fg="#333333")
|
||||||
|
timex_label.pack(pady=20)
|
||||||
|
|
||||||
|
# 按钮
|
||||||
|
start_button = tk.Button(root, text="🎮 开始 / 停止", font=("微软雅黑", 12, "bold"),
|
||||||
|
bg="#66ccff", fg="white", activebackground="#3399cc",
|
||||||
|
width=20, height=2, command=change, relief="raised", bd=3)
|
||||||
|
start_button.pack(pady=30)
|
||||||
|
|
||||||
|
# 控制变量
|
||||||
|
flag = False
|
||||||
|
start_time = 0
|
||||||
|
|
||||||
|
# 启动主循环
|
||||||
|
root.mainloop()
|
||||||
65
base/base.py
Normal file
65
base/base.py
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
import tkinter as tk
|
||||||
|
import time
|
||||||
|
from tkinter import messagebox
|
||||||
|
|
||||||
|
# 创建主窗口
|
||||||
|
root = tk.Tk()
|
||||||
|
root.geometry("300x400") # 设置窗口大小
|
||||||
|
root.title("10秒挑战")
|
||||||
|
|
||||||
|
bg_image = tk.PhotoImage(file ='十秒挑战.png')
|
||||||
|
bg_label = tk.Label(root, image = bg_image)
|
||||||
|
bg_label.place(x=0, y=0, relwidth=1, relheight=1)
|
||||||
|
|
||||||
|
# 初始化运行状态
|
||||||
|
flag = False
|
||||||
|
|
||||||
|
# 定期更新显示时间
|
||||||
|
def update_time():
|
||||||
|
if flag:
|
||||||
|
now = time.time()
|
||||||
|
timex = now - start_time
|
||||||
|
timex_label.config(text=f"时间:{timex:.3f} 秒\n")
|
||||||
|
root.after(10, update_time) # 10ms 后更新一次
|
||||||
|
|
||||||
|
# 根据当前状态开始或停止计时
|
||||||
|
def change():
|
||||||
|
global flag, start_time
|
||||||
|
|
||||||
|
if not flag: # 如果计时尚未开始
|
||||||
|
flag = True
|
||||||
|
start_time = time.time() # 获取当前时间戳
|
||||||
|
update_time() # 开始更新时间显示
|
||||||
|
else: # 如果计时已经开始
|
||||||
|
flag = False # 停止更新时间显示
|
||||||
|
end_time = time.time() # 获取当前时间戳
|
||||||
|
timex = end_time - start_time # 计算实际耗时
|
||||||
|
goal = 10 # 目标耗时
|
||||||
|
|
||||||
|
# 计算时间差
|
||||||
|
time_difference = abs(timex - goal)
|
||||||
|
|
||||||
|
# 更新显示
|
||||||
|
timex_label.config(text=f"实际时间:{timex:.3f}秒\n误差:{time_difference:.3f}秒")
|
||||||
|
|
||||||
|
# 显示结果
|
||||||
|
if f'{time_difference:.3f}' == '0.000':
|
||||||
|
messagebox.showinfo("结果","难以置信!你就是掌控时间的神!")
|
||||||
|
else:
|
||||||
|
messagebox.showinfo("结果","还差一点点,再接再厉吧!")
|
||||||
|
|
||||||
|
# 创建标签
|
||||||
|
title_label = tk.Label(root, text="10 秒挑战", font=("楷体", 16))
|
||||||
|
title_label.pack(pady=(72,10))
|
||||||
|
|
||||||
|
# 创建时间显示标签
|
||||||
|
timex_label = tk.Label(root, text="点击按钮开始挑战\n", font=("楷体", 12))
|
||||||
|
timex_label.pack(pady=(22,17))
|
||||||
|
|
||||||
|
# 创建按钮并设置图片
|
||||||
|
btn_photo = tk.PhotoImage(file ='按钮.png')
|
||||||
|
btn = tk.Button(root, image=btn_photo, command=change)
|
||||||
|
btn.pack(pady=20)
|
||||||
|
|
||||||
|
# 运行Tkinter主循环
|
||||||
|
root.mainloop()
|
||||||
BIN
base/十秒挑战.png
Normal file
BIN
base/十秒挑战.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
BIN
base/按钮.png
Normal file
BIN
base/按钮.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.5 KiB |
3578
build/client/Analysis-00.toc
Normal file
3578
build/client/Analysis-00.toc
Normal file
File diff suppressed because it is too large
Load Diff
3042
build/client/EXE-00.toc
Normal file
3042
build/client/EXE-00.toc
Normal file
File diff suppressed because it is too large
Load Diff
3020
build/client/PKG-00.toc
Normal file
3020
build/client/PKG-00.toc
Normal file
File diff suppressed because it is too large
Load Diff
BIN
build/client/PYZ-00.pyz
Normal file
BIN
build/client/PYZ-00.pyz
Normal file
Binary file not shown.
577
build/client/PYZ-00.toc
Normal file
577
build/client/PYZ-00.toc
Normal file
@ -0,0 +1,577 @@
|
|||||||
|
('C:\\sairateproject\\TenSecondChallenge\\build\\client\\PYZ-00.pyz',
|
||||||
|
[('__future__',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\__future__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_compat_pickle',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\_compat_pickle.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_compression',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\_compression.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_py_abc',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\_py_abc.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_pydecimal',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\_pydecimal.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_strptime',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\_strptime.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_threading_local',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\_threading_local.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('argparse',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\argparse.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('ast',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\ast.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('base64',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\base64.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('bisect',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\bisect.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('bz2',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\bz2.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('calendar',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\calendar.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('certifi',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\certifi\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('certifi.core',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\certifi\\core.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('charset_normalizer',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\charset_normalizer\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('charset_normalizer.api',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\charset_normalizer\\api.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('charset_normalizer.cd',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\charset_normalizer\\cd.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('charset_normalizer.constant',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\charset_normalizer\\constant.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('charset_normalizer.legacy',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\charset_normalizer\\legacy.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('charset_normalizer.models',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\charset_normalizer\\models.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('charset_normalizer.utils',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\charset_normalizer\\utils.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('charset_normalizer.version',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\charset_normalizer\\version.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('contextlib',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\contextlib.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('contextvars',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\contextvars.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('copy',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\copy.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('csv',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\csv.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('dataclasses',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\dataclasses.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('datetime',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\datetime.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('decimal',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\decimal.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('dis',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\dis.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email._encoded_words',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\_encoded_words.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email._header_value_parser',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\_header_value_parser.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email._parseaddr',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\_parseaddr.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email._policybase',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\_policybase.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.base64mime',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\base64mime.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.charset',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\charset.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.contentmanager',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\contentmanager.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.encoders',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\encoders.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.errors',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\errors.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.feedparser',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\feedparser.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.generator',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\generator.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.header',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\header.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.headerregistry',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\headerregistry.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.iterators',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\iterators.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.message',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\message.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.parser',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\parser.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.policy',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\policy.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.quoprimime',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\quoprimime.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.utils',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\email\\utils.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('fnmatch',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\fnmatch.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('fractions',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\fractions.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('ftplib',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\ftplib.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('getopt',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\getopt.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('getpass',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\getpass.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('gettext',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\gettext.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('gzip',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\gzip.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('hashlib',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\hashlib.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('hmac',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\hmac.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('http',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\http\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('http.client',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\http\\client.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('http.cookiejar',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\http\\cookiejar.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('http.cookies',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\http\\cookies.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('idna',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\idna\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('idna.core',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\idna\\core.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('idna.idnadata',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\idna\\idnadata.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('idna.intranges',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\idna\\intranges.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('idna.package_data',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\idna\\package_data.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('idna.uts46data',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\idna\\uts46data.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib._abc',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\_abc.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib._adapters',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\_adapters.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib._bootstrap',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\_bootstrap.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib._bootstrap_external',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\_bootstrap_external.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib._common',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\_common.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.abc',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\abc.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.machinery',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\machinery.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\metadata\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata._adapters',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\metadata\\_adapters.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata._collections',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\metadata\\_collections.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata._functools',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\metadata\\_functools.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata._itertools',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\metadata\\_itertools.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata._meta',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\metadata\\_meta.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata._text',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\metadata\\_text.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.readers',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\readers.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.resources',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\resources.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.util',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\importlib\\util.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('inspect',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\inspect.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('ipaddress',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\ipaddress.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('json',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\json\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('json.decoder',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\json\\decoder.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('json.encoder',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\json\\encoder.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('json.scanner',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\json\\scanner.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('logging',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\logging\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('lzma',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\lzma.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('mimetypes',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\mimetypes.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('netrc',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\netrc.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('nturl2path',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\nturl2path.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('numbers',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\numbers.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('opcode',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\opcode.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('optparse',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\optparse.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pathlib',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\pathlib.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pickle',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\pickle.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pprint',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\pprint.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('py_compile',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\py_compile.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('queue',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\queue.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('quopri',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\quopri.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('random',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\random.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.__version__',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\__version__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests._internal_utils',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\_internal_utils.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.adapters',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\adapters.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.api',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\api.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.auth',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\auth.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.certs',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\certs.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.compat',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\compat.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.cookies',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\cookies.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.exceptions',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\exceptions.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.hooks',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\hooks.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.models',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\models.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.packages',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\packages.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.sessions',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\sessions.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.status_codes',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\status_codes.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.structures',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\structures.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('requests.utils',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\requests\\utils.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('selectors',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\selectors.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('shlex',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\shlex.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('shutil',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\shutil.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('signal',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\signal.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('socket',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\socket.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('ssl',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\ssl.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('statistics',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\statistics.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('string',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\string.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('stringprep',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\stringprep.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('subprocess',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\subprocess.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('tarfile',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\tarfile.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('tempfile',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\tempfile.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('textwrap',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\textwrap.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('threading',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\threading.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('tkinter',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\tkinter\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('tkinter.commondialog',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\tkinter\\commondialog.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('tkinter.constants',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\tkinter\\constants.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('tkinter.messagebox',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\tkinter\\messagebox.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('tkinter.simpledialog',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\tkinter\\simpledialog.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('token',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\token.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('tokenize',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\tokenize.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('tracemalloc',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\tracemalloc.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('typing',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\typing.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\urllib\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib.error',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\urllib\\error.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib.parse',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\urllib\\parse.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib.request',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\urllib\\request.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib.response',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\urllib\\response.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3._base_connection',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\_base_connection.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3._collections',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\_collections.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3._request_methods',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\_request_methods.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3._version',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\_version.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.connection',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\connection.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.connectionpool',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\connectionpool.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.contrib',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\contrib\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.contrib.emscripten',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\contrib\\emscripten\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.contrib.emscripten.connection',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\contrib\\emscripten\\connection.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.contrib.emscripten.fetch',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\contrib\\emscripten\\fetch.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.contrib.emscripten.request',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\contrib\\emscripten\\request.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.contrib.emscripten.response',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\contrib\\emscripten\\response.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.contrib.pyopenssl',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\contrib\\pyopenssl.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.contrib.socks',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\contrib\\socks.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.exceptions',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\exceptions.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.fields',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\fields.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.filepost',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\filepost.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.http2',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\http2\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.http2.connection',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\http2\\connection.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.http2.probe',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\http2\\probe.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.poolmanager',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\poolmanager.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.response',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\response.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.util',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\util\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.util.connection',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\util\\connection.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.util.proxy',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\util\\proxy.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.util.request',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\util\\request.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.util.response',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\util\\response.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.util.retry',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\util\\retry.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.util.ssl_',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\util\\ssl_.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.util.ssl_match_hostname',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\util\\ssl_match_hostname.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.util.ssltransport',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\util\\ssltransport.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.util.timeout',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\util\\timeout.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.util.url',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\util\\url.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.util.util',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\util\\util.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib3.util.wait',
|
||||||
|
'C:\\sairateproject\\TenSecondChallenge\\.venv\\lib\\site-packages\\urllib3\\util\\wait.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('uu',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\uu.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('zipfile',
|
||||||
|
'C:\\Users\\sairate\\AppData\\Local\\Programs\\Python\\Python310\\lib\\zipfile.py',
|
||||||
|
'PYMODULE')])
|
||||||
BIN
build/client/base_library.zip
Normal file
BIN
build/client/base_library.zip
Normal file
Binary file not shown.
BIN
build/client/client.pkg
Normal file
BIN
build/client/client.pkg
Normal file
Binary file not shown.
48
build/client/warn-client.txt
Normal file
48
build/client/warn-client.txt
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
|
||||||
|
This file lists modules PyInstaller was not able to find. This does not
|
||||||
|
necessarily mean this module is required for running your program. Python and
|
||||||
|
Python 3rd-party packages include a lot of conditional or optional modules. For
|
||||||
|
example the module 'ntpath' only exists on Windows, whereas the module
|
||||||
|
'posixpath' only exists on Posix systems.
|
||||||
|
|
||||||
|
Types if import:
|
||||||
|
* top-level: imported at the top-level - look at these first
|
||||||
|
* conditional: imported within an if-statement
|
||||||
|
* delayed: imported within a function
|
||||||
|
* optional: imported within a try-except-statement
|
||||||
|
|
||||||
|
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
|
||||||
|
tracking down the missing module yourself. Thanks!
|
||||||
|
|
||||||
|
missing module named 'org.python' - imported by copy (optional)
|
||||||
|
missing module named org - imported by pickle (optional)
|
||||||
|
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional)
|
||||||
|
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional)
|
||||||
|
missing module named pep517 - imported by importlib.metadata (delayed)
|
||||||
|
missing module named posix - imported by os (conditional, optional), shutil (conditional), importlib._bootstrap_external (conditional)
|
||||||
|
missing module named resource - imported by posix (top-level)
|
||||||
|
missing module named grp - imported by subprocess (delayed, conditional, optional), shutil (delayed, optional), tarfile (optional), pathlib (delayed, optional)
|
||||||
|
missing module named pwd - imported by posixpath (delayed, conditional), subprocess (delayed, conditional, optional), shutil (delayed, optional), tarfile (optional), pathlib (delayed, optional), netrc (delayed, conditional), getpass (delayed)
|
||||||
|
missing module named _posixsubprocess - imported by subprocess (optional)
|
||||||
|
missing module named fcntl - imported by subprocess (optional)
|
||||||
|
missing module named _scproxy - imported by urllib.request (conditional)
|
||||||
|
missing module named termios - imported by getpass (optional)
|
||||||
|
missing module named simplejson - imported by requests.compat (conditional, optional)
|
||||||
|
missing module named dummy_threading - imported by requests.cookies (optional)
|
||||||
|
missing module named typing_extensions - imported by urllib3.util.retry (conditional), urllib3._collections (conditional), urllib3.util.ssltransport (conditional), urllib3.connectionpool (conditional), urllib3.poolmanager (conditional), urllib3.contrib.emscripten.fetch (conditional), charset_normalizer.legacy (conditional)
|
||||||
|
missing module named 'h2.events' - imported by urllib3.http2.connection (top-level)
|
||||||
|
missing module named 'h2.connection' - imported by urllib3.http2.connection (top-level)
|
||||||
|
missing module named h2 - imported by urllib3.http2.connection (top-level)
|
||||||
|
missing module named zstandard - imported by urllib3.util.request (optional), urllib3.response (optional)
|
||||||
|
missing module named brotli - imported by urllib3.util.request (optional), urllib3.response (optional)
|
||||||
|
missing module named brotlicffi - imported by urllib3.util.request (optional), urllib3.response (optional)
|
||||||
|
missing module named socks - imported by urllib3.contrib.socks (optional)
|
||||||
|
missing module named 'typing.io' - imported by importlib.resources (top-level)
|
||||||
|
missing module named cryptography - imported by urllib3.contrib.pyopenssl (top-level), requests (conditional, optional)
|
||||||
|
missing module named 'OpenSSL.crypto' - imported by urllib3.contrib.pyopenssl (delayed, conditional)
|
||||||
|
missing module named 'cryptography.x509' - imported by urllib3.contrib.pyopenssl (delayed, optional)
|
||||||
|
missing module named OpenSSL - imported by urllib3.contrib.pyopenssl (top-level)
|
||||||
|
missing module named chardet - imported by requests (optional)
|
||||||
|
missing module named 'pyodide.ffi' - imported by urllib3.contrib.emscripten.fetch (delayed, optional)
|
||||||
|
missing module named pyodide - imported by urllib3.contrib.emscripten.fetch (top-level)
|
||||||
|
missing module named js - imported by urllib3.contrib.emscripten.fetch (top-level)
|
||||||
10178
build/client/xref-client.html
Normal file
10178
build/client/xref-client.html
Normal file
File diff suppressed because it is too large
Load Diff
39
client.spec
Normal file
39
client.spec
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# -*- mode: python ; coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
a = Analysis(
|
||||||
|
['client.py'],
|
||||||
|
pathex=[],
|
||||||
|
binaries=[],
|
||||||
|
datas=[],
|
||||||
|
hiddenimports=[],
|
||||||
|
hookspath=[],
|
||||||
|
hooksconfig={},
|
||||||
|
runtime_hooks=[],
|
||||||
|
excludes=[],
|
||||||
|
noarchive=False,
|
||||||
|
optimize=0,
|
||||||
|
)
|
||||||
|
pyz = PYZ(a.pure)
|
||||||
|
|
||||||
|
exe = EXE(
|
||||||
|
pyz,
|
||||||
|
a.scripts,
|
||||||
|
a.binaries,
|
||||||
|
a.datas,
|
||||||
|
[],
|
||||||
|
name='client',
|
||||||
|
debug=False,
|
||||||
|
bootloader_ignore_signals=False,
|
||||||
|
strip=False,
|
||||||
|
upx=True,
|
||||||
|
upx_exclude=[],
|
||||||
|
runtime_tmpdir=None,
|
||||||
|
console=False,
|
||||||
|
disable_windowed_traceback=False,
|
||||||
|
argv_emulation=False,
|
||||||
|
target_arch=None,
|
||||||
|
codesign_identity=None,
|
||||||
|
entitlements_file=None,
|
||||||
|
icon=['icon.ico'],
|
||||||
|
)
|
||||||
BIN
dist/client.exe
vendored
Normal file
BIN
dist/client.exe
vendored
Normal file
Binary file not shown.
BIN
icon/cl.png
Normal file
BIN
icon/cl.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.1 KiB |
BIN
icon/icon.ico
Normal file
BIN
icon/icon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 162 KiB |
26
leaderboard.json
Normal file
26
leaderboard.json
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[
|
||||||
|
[
|
||||||
|
"sairate",
|
||||||
|
7.6888275146484e-05
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"企鹅老师",
|
||||||
|
0.0014181137084960938
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"岳老师",
|
||||||
|
0.10199546813964844
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"666",
|
||||||
|
0.10787606239318848
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"莱德老师",
|
||||||
|
0.17050576210021973
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"小霖老师",
|
||||||
|
0.3652153015136719
|
||||||
|
]
|
||||||
|
]
|
||||||
BIN
requirements.txt
Normal file
BIN
requirements.txt
Normal file
Binary file not shown.
161
yun/client.py
Normal file
161
yun/client.py
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
import tkinter as tk
|
||||||
|
from tkinter import messagebox, simpledialog
|
||||||
|
import time
|
||||||
|
import requests
|
||||||
|
|
||||||
|
API_URL = "http://47.80.30.142:6364" # Flask 接口地址
|
||||||
|
|
||||||
|
# 读取排行榜数据(从 Flask 获取)
|
||||||
|
def load_leaderboard():
|
||||||
|
try:
|
||||||
|
resp = requests.get(f"{API_URL}/get_board")
|
||||||
|
if resp.status_code == 200:
|
||||||
|
return resp.json()
|
||||||
|
else:
|
||||||
|
return []
|
||||||
|
except Exception as e:
|
||||||
|
messagebox.showerror("错误", f"无法加载排行榜数据:{e}")
|
||||||
|
return []
|
||||||
|
|
||||||
|
# 获取参赛者姓名
|
||||||
|
def get_player_name():
|
||||||
|
name = simpledialog.askstring("参赛者姓名", "请输入您的姓名:")
|
||||||
|
if not name:
|
||||||
|
messagebox.showwarning("警告", "姓名不能为空,请重新输入。")
|
||||||
|
return get_player_name()
|
||||||
|
return name
|
||||||
|
|
||||||
|
# 上传成绩并刷新排行榜
|
||||||
|
def submit_result(name, error):
|
||||||
|
try:
|
||||||
|
# 先下载当前排行榜
|
||||||
|
leaderboard = load_leaderboard()
|
||||||
|
|
||||||
|
# 查找或更新当前用户成绩(误差更小的)
|
||||||
|
found = False
|
||||||
|
for entry in leaderboard:
|
||||||
|
if entry["name"] == name:
|
||||||
|
found = True
|
||||||
|
if abs(error) < entry["error"]:
|
||||||
|
entry["error"] = round(abs(error), 3)
|
||||||
|
break
|
||||||
|
if not found:
|
||||||
|
leaderboard.append({"name": name, "error": round(abs(error), 3)})
|
||||||
|
|
||||||
|
# 按误差升序排序
|
||||||
|
leaderboard.sort(key=lambda x: x["error"])
|
||||||
|
|
||||||
|
# 提交新的排行榜到服务器
|
||||||
|
resp = requests.post(f"{API_URL}/set_board", json=leaderboard)
|
||||||
|
if resp.status_code == 200:
|
||||||
|
update_rank_display(leaderboard)
|
||||||
|
else:
|
||||||
|
messagebox.showerror("提交失败", "提交成绩失败,请稍后再试。")
|
||||||
|
except Exception as e:
|
||||||
|
messagebox.showerror("错误", f"提交成绩时出错:{e}")
|
||||||
|
|
||||||
|
|
||||||
|
# 显示排行榜
|
||||||
|
def update_rank_display(leaderboard):
|
||||||
|
rank_listbox.delete(0, tk.END)
|
||||||
|
for i, entry in enumerate(leaderboard, 1):
|
||||||
|
n, e = entry["name"], entry["error"]
|
||||||
|
rank_listbox.insert(tk.END, f"{i}. {n:<8} 误差: {e:.3f}s")
|
||||||
|
|
||||||
|
# 更新时间函数
|
||||||
|
def update_time():
|
||||||
|
if flag:
|
||||||
|
now = time.time()
|
||||||
|
timex = now - start_time
|
||||||
|
timex_label.config(text=f"⏱ 时间:{timex:.3f} 秒")
|
||||||
|
root.after(10, update_time)
|
||||||
|
|
||||||
|
def show_win_animation():
|
||||||
|
anim = tk.Toplevel(root)
|
||||||
|
anim.geometry("320x200")
|
||||||
|
anim.title("🎉 胜利动画")
|
||||||
|
anim.configure(bg="#ffffff")
|
||||||
|
anim.attributes("-topmost", True)
|
||||||
|
|
||||||
|
label = tk.Label(anim, text="🎉 完美掌控时间!🎉", font=("微软雅黑", 18, "bold"), bg="#ffffff")
|
||||||
|
label.pack(expand=True)
|
||||||
|
|
||||||
|
colors = ["#ff6666", "#66cc66", "#3399ff", "#ffcc00", "#cc66ff"]
|
||||||
|
sizes = [18, 22, 26, 30, 26, 22, 18]
|
||||||
|
|
||||||
|
def animate(i=0):
|
||||||
|
if i < len(sizes):
|
||||||
|
label.config(font=("微软雅黑", sizes[i], "bold"), fg=colors[i % len(colors)])
|
||||||
|
anim.after(150, animate, i + 1)
|
||||||
|
else:
|
||||||
|
anim.destroy()
|
||||||
|
|
||||||
|
animate()
|
||||||
|
|
||||||
|
# 控制开始/停止
|
||||||
|
def change():
|
||||||
|
global flag, start_time
|
||||||
|
|
||||||
|
if not flag:
|
||||||
|
flag = True
|
||||||
|
start_time = time.time()
|
||||||
|
update_time()
|
||||||
|
else:
|
||||||
|
flag = False
|
||||||
|
end_time = time.time()
|
||||||
|
timex = end_time - start_time
|
||||||
|
error = timex - 10
|
||||||
|
|
||||||
|
timex_label.config(text=f"✅ 实际时间:{timex:.3f} 秒\n误差:{error:.3f} 秒")
|
||||||
|
|
||||||
|
name = get_player_name()
|
||||||
|
submit_result(name, error)
|
||||||
|
|
||||||
|
if abs(error) < 0.01:
|
||||||
|
show_win_animation()
|
||||||
|
else:
|
||||||
|
messagebox.showinfo("结果", "还差一点点,再接再厉吧!")
|
||||||
|
|
||||||
|
# ================================
|
||||||
|
# 主窗口
|
||||||
|
# ================================
|
||||||
|
|
||||||
|
root = tk.Tk()
|
||||||
|
root.geometry("340x500")
|
||||||
|
root.title("10秒挑战")
|
||||||
|
root.configure(bg="#f0faff")
|
||||||
|
|
||||||
|
# 标题
|
||||||
|
title_label = tk.Label(root, text="🎯 10 秒挑战 🎯", font=("微软雅黑", 18, "bold"), fg="#004466", bg="#f0faff")
|
||||||
|
title_label.pack(pady=15)
|
||||||
|
|
||||||
|
# 排行榜框
|
||||||
|
rank_frame = tk.Frame(root, bg="#ffffff", bd=2, relief="groove")
|
||||||
|
rank_frame.pack(pady=10)
|
||||||
|
|
||||||
|
rank_title = tk.Label(rank_frame, text="🏆 排行榜(误差越小越靠前)", font=("微软雅黑", 10, "bold"), bg="#ffffff", fg="#333333")
|
||||||
|
rank_title.pack(pady=(5, 0))
|
||||||
|
|
||||||
|
rank_listbox = tk.Listbox(rank_frame, font=("Courier", 10), height=5, width=35, bg="#f9f9f9")
|
||||||
|
rank_listbox.pack(padx=10, pady=5)
|
||||||
|
|
||||||
|
# 初始显示排行榜
|
||||||
|
leaderboard = load_leaderboard()
|
||||||
|
update_rank_display(leaderboard)
|
||||||
|
|
||||||
|
# 时间标签
|
||||||
|
timex_label = tk.Label(root, text="点击按钮开始挑战", font=("微软雅黑", 12), bg="#f0faff", fg="#333333")
|
||||||
|
timex_label.pack(pady=20)
|
||||||
|
|
||||||
|
# 按钮
|
||||||
|
start_button = tk.Button(root, text="🎮 开始 / 停止", font=("微软雅黑", 12, "bold"),
|
||||||
|
bg="#66ccff", fg="white", activebackground="#3399cc",
|
||||||
|
width=20, height=2, command=change, relief="raised", bd=3)
|
||||||
|
start_button.pack(pady=30)
|
||||||
|
|
||||||
|
# 控制变量
|
||||||
|
flag = False
|
||||||
|
start_time = 0
|
||||||
|
|
||||||
|
# 启动主循环
|
||||||
|
root.mainloop()
|
||||||
37
yun/server.py
Normal file
37
yun/server.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
from flask import Flask, request, jsonify
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
LEADERBOARD_FILE = "../leaderboard.json"
|
||||||
|
|
||||||
|
# 加载排行榜数据
|
||||||
|
def load_leaderboard():
|
||||||
|
if os.path.exists(LEADERBOARD_FILE):
|
||||||
|
with open(LEADERBOARD_FILE, "r", encoding="utf-8") as f:
|
||||||
|
return json.load(f)
|
||||||
|
return []
|
||||||
|
|
||||||
|
# 保存排行榜数据
|
||||||
|
def save_leaderboard(data):
|
||||||
|
with open(LEADERBOARD_FILE, "w", encoding="utf-8") as f:
|
||||||
|
json.dump(data, f, ensure_ascii=False, indent=2)
|
||||||
|
|
||||||
|
# 获取排行榜
|
||||||
|
@app.route("/get_board", methods=["GET"])
|
||||||
|
def get_board():
|
||||||
|
return jsonify(load_leaderboard())
|
||||||
|
|
||||||
|
# 上传排行榜
|
||||||
|
@app.route("/set_board", methods=["POST"])
|
||||||
|
def set_board():
|
||||||
|
try:
|
||||||
|
data = request.json
|
||||||
|
save_leaderboard(data)
|
||||||
|
return jsonify(data) # 直接返回排行榜
|
||||||
|
except Exception as e:
|
||||||
|
return jsonify({"status": "error", "message": str(e)}), 400
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app.run(debug=True, port=5000)
|
||||||
Loading…
x
Reference in New Issue
Block a user