import tkinter as tk import random import time from tkinter import font # 创建主窗口 root = tk.Tk() root.title("Windows Blue Screen Simulator") root.attributes('-fullscreen', True) # 全屏 root.configure(bg='#000080') # 经典蓝屏蓝色 # 设置字体 try: # 尝试使用等宽字体 text_font = font.Font(family='Consolas', size=12) title_font = font.Font(family='Consolas', size=16, weight='bold') error_font = font.Font(family='Courier', size=14, weight='bold') except: # 备用字体 text_font = font.Font(family='Courier', size=12) title_font = font.Font(family='Courier', size=16, weight='bold') error_font = font.Font(family='Courier', size=14, weight='bold') # 生成随机错误代码 error_code = f"0x{random.randint(10000000, 0xFFFFFFFF):X}" # 存储按键状态的变量 pressed_keys = set() # 蓝屏文本内容 # 修复了原代码中直接将 pack() 结果赋值的错误 tk.Label(root, text="你的电脑遇到问题,需要重新启动。我们只收集某些错误信息,然后你可以重新启动。", bg='#000080', fg='white', font=title_font).pack(anchor='w', padx=50, pady=(50, 20)) tk.Label(root, text=f"错误代码: {error_code}", bg='#000080', fg='yellow', font=error_font).pack(anchor='w', padx=50, pady=(0, 20)) # 进度标签(命名以便后续获取)progress_label = tk.Label(root, text="收集内存转储信息... 0%", bg='#000080', fg='white', font=text_font, name='progress_label') progress_label.pack(anchor='w', padx=50, pady=(0, 10)) # 进度条画布(命名以便后续获取)progress_bar = tk.Canvas(root, width=800, height=20, bg='#000080', highlightthickness=2, highlightbackground='white', name='progress_bar') progress_bar.pack(anchor='w', padx=50, pady=(0, 30)) tk.Label(root, text=f""" 技术信息: *** STOP: {error_code} (0x{random.randint(10000000, 0xFFFFFFFF):X}, 0x{random.randint(10000000, 0xFFFFFFFF):X}, 0x{random.randint(10000000, 0xFFFFFFFF):X}, 0x{random.randint(10000000, 0xFFFFFFFF):X}) 如果这是你第一次看到此停止错误屏幕,请重启你的电脑。如果此屏幕再次出现,请按照下列步骤操作: 检查以确保新的硬件或软件已正确安装。如果这是新安装,请向你的硬件或软件 制造商询问你可能需要的 Windows 更新。如果问题继续,禁用或删除任何新安装的硬件或软件。禁用 BIOS 内存选项,例如缓存或阴影。如果你需要使用安全模式删除或禁用组件,请重启电脑,按 F8 键选择高级启动选项,然后选择安全模式。有关此问题的技术信息,请访问 https://support.microsoft.com 收集完信息后将自动重启你的电脑...""", bg='#000080', fg='white', font=text_font, justify='left').pack(anchor='w', padx=50, pady=(0, 20)) # 绘制进度条背景 progress_bar.create_rectangle(0, 0, 800, 20, outline='white', width=2) progress_fill = progress_bar.create_rectangle(2, 2, 2, 18, fill='yellow', outline='') progress = 0 def update_progress(): """更新进度条""" global progress if progress < 100: progress += random.uniform(0.05, 0.15) # 更新进度文本 progress_label.config(text=f"收集内存转储信息... {min(int(progress), 100)}%") # 更新进度条 progress_bar.coords(progress_fill, 2, 2, int(796 * progress / 100), 18) if progress >= 100: # 进度到 100% 后重置 # 改用 tkinter 的 after 代替 time.sleep,避免界面卡死 root.after(2000, reset_progress) # 循环调用 root.after(50, update_progress) def reset_progress(): """重置进度条""" global progress progress_bar.coords(progress_fill, 2, 2, 2, 18) progress = 0 def on_key_press(event): """按键按下事件处理""" # 将按下的键加入集合 pressed_keys.add(event.keysym) # 检查是否同时按下 F5 和 F4 if 'F5' in pressed_keys and 'F4' in pressed_keys: root.destroy() def on_key_release(event): """按键释放事件处理""" # 从集合中移除释放的键 if event.keysym in pressed_keys: pressed_keys.remove(event.keysym) # 绑定 F5 和 F4 的按下 / 释放事件 root.bind('', on_key_press) root.bind('', on_key_release) # 启动进度更新 update_progress() # 运行主循环 root.mainloop()