一、软件界面

二、程序代码
import tkinter as tk
from tkinter import messagebox
import pyautogui
import time
import threading
from pynput import keyboard # 监听全局键盘
# 全局控制变量
stop_typing = False # 停止标记(彻底终止)
pause_typing = False # 暂停标记(可继续)
current_index = 0 # 当前输入到的字符索引
target_text = “” # 待输入的目标文本
# 设置pyautogui的全局延迟
pyautogui.PAUSE = 0.05
def on_key_press(key):
“””全局键盘监听:ESC键一键切换暂停/继续(第一次暂停、第二次继续)”””
global pause_typing
try:
# 监听ESC键(仅响应ESC,忽略其他键)
if key == keyboard.Key.esc:
pause_typing = not pause_typing # 切换暂停状态
if pause_typing:
print(“🔴 打字已暂停(再次按ESC键继续)”)
else:
print(“🟢 继续打字…”)
except Exception as e:
pass
return True # 保持监听不终止
def start_key_listener():
“””启动键盘监听线程”””
listener = keyboard.Listener(on_press=on_key_press)
listener.daemon = True # 守护线程,关闭窗口时自动退出
listener.start()
def type_text(delay):
“””核心打字函数:支持ESC暂停/继续、断点续输”””
global stop_typing, pause_typing, current_index, target_text
stop_typing = False
pause_typing = False
current_index = 0 # 重置输入位置
# 倒计时提示
for i in range(3, 0, -1):
if stop_typing:
return
print(f”即将开始打字,倒计时 {i} 秒…(ESC键:第一次暂停 | 第二次继续)”)
time.sleep(1)
# 逐字符输入(基于索引,支持断点续输)
while current_index < len(target_text):
# 检测停止指令(彻底终止)
if stop_typing:
print(“❌ 打字已停止”)
return
# 检测暂停指令:暂停时循环等待,直到ESC继续或Stop终止
while pause_typing and not stop_typing:
time.sleep(0.1)
# 输入当前字符
char = target_text[current_index]
pyautogui.typewrite(char)
time.sleep(delay)
# 索引+1,推进输入进度
current_index += 1
# 输入完成提示
if not stop_typing:
messagebox.showinfo(“完成”, “文本输入已完成!”)
def start_typing():
“””开始打字的按钮回调”””
global target_text
# 获取输入的文本和延迟
text = text_input.get(“1.0”, tk.END).strip()
delay_str = delay_input.get().strip()
# 校验输入合法性
if not text:
messagebox.showwarning(“警告”, “请输入需要自动打字的文本!”)
return
if not delay_str:
messagebox.showwarning(“警告”, “请输入打字延迟(秒)!”)
return
try:
delay = float(delay_str)
if delay < 0:
raise ValueError
except ValueError:
messagebox.showwarning(“警告”, “延迟必须是大于等于0的数字!”)
return
# 保存目标文本,供打字函数使用
target_text = text
# 启动打字线程
typing_thread = threading.Thread(target=type_text, args=(delay,))
typing_thread.daemon = True
typing_thread.start()
def stop_typing_now():
“””停止打字(彻底终止,不可续输)”””
global stop_typing
stop_typing = True
messagebox.showinfo(“提示”, “已发送停止指令,打字将立即终止!”)
if __name__ == “__main__”:
# 启动全局键盘监听(监听ESC键)
start_key_listener()
# 创建GUI界面
root = tk.Tk()
root.title(“自动打字机 (Auto Typer) – ESC键暂停/继续”)
root.geometry(“600×450”)
root.resizable(True, True)
# 1. 文本输入区域
text_label = tk.Label(root, text=”需要自动输入的文本:”)
text_label.pack(pady=5)
text_input = tk.Text(root, width=70, height=10)
text_input.pack(padx=10, pady=5)
text_input.insert(tk.END, “这是自动打字机的测试文本
支持多行输入哦~
ESC键:第一次按暂停 | 第二次按继续!”)
# 2. 延迟设置区域
delay_frame = tk.Frame(root)
delay_frame.pack(pady=5)
delay_label = tk.Label(delay_frame, text=”字符间隔延迟(秒):”)
delay_label.pack(side=tk.LEFT, padx=5)
delay_input = tk.Entry(delay_frame, width=10)
delay_input.pack(side=tk.LEFT, padx=5)
delay_input.insert(tk.END, “0.1”)
# 3. 按钮区域
button_frame = tk.Frame(root)
button_frame.pack(pady=15)
start_btn = tk.Button(
button_frame, text=”开始打字”,
command=start_typing, width=15, height=2, bg=”#4CAF50″, fg=”white”
)
start_btn.pack(side=tk.LEFT, padx=10)
stop_btn = tk.Button(
button_frame, text=”停止打字”,
command=stop_typing_now, width=15, height=2, bg=”#f44336″, fg=”white”
)
stop_btn.pack(side=tk.LEFT, padx=10)
# 新增:快捷键提示文字
tip_label = tk.Label(
root, text=”💡 全局快捷键:ESC键(第一次暂停 | 第二次继续) | 停止按钮 = 彻底终止”,
fg=”#666666″, font=(“微软雅黑”, 10)
)
tip_label.pack(pady=5)
# 运行主循环
root.mainloop()




