基于Python的自动打字机软件设计与实现(附程序+软件下载直接可用)

内容分享5小时前发布
3 0 0

一、软件界面

基于Python的自动打字机软件设计与实现(附程序+软件下载直接可用)

二、程序代码

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()

© 版权声明

相关文章

暂无评论

none
暂无评论...