You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyGame批量模拟键盘指令输入需求及现有代码问题

解决方案

要实现按下回车键后自动模拟指定按键序列并输出对应信息,我们可以通过pygame.event.post()手动生成键盘事件,同时控制事件发送节奏避免一次性触发所有操作。以下是修改后的完整代码:

import pygame
from pygame.locals import *

class Test():
    def __init__(self):
        # 定义需要模拟的按键序列
        self.simulate_keys = [K_1, K_2, K_3]
        # 模拟状态控制变量
        self.is_simulating = False
        self.current_key_idx = 0
        self.last_send_time = 0
        # 每个按键模拟的间隔(毫秒)
        self.send_interval = 500

    def mainloop(self):
        rot_slice_map = {K_1: 'pressed key 1', K_2: 'pressed key 2', K_3: 'pressed key 3'}

        while True:
            current_time = pygame.time.get_ticks()

            # 处理模拟按键逻辑
            if self.is_simulating:
                # 达到间隔时间,发送下一个按键事件
                if current_time - self.last_send_time >= self.send_interval:
                    if self.current_key_idx < len(self.simulate_keys):
                        key = self.simulate_keys[self.current_key_idx]
                        # 生成并发送KEYDOWN事件
                        pygame.event.post(pygame.event.Event(KEYDOWN, key=key))
                        self.last_send_time = current_time
                        self.current_key_idx += 1
                    else:
                        # 模拟完成,重置状态
                        self.is_simulating = False
                        self.current_key_idx = 0

            # 处理事件队列
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    exit()
                if event.type == KEYDOWN:
                    # 监听回车键,触发模拟
                    if event.key == K_RETURN:
                        if not self.is_simulating:
                            self.is_simulating = True
                            self.last_send_time = current_time
                    # 处理真实或模拟的按键事件
                    if event.key in rot_slice_map:
                        print(rot_slice_map[event.key])

def main():
    pygame.init()
    display = (800,600)
    pygame.display.set_mode(display, DOUBLEBUF|OPENGL)

    test = Test()
    test.mainloop()

if __name__ == '__main__':
    main()
    pygame.quit()
    exit()

关键修改说明

  • 添加模拟控制变量:在__init__中定义模拟按键序列、模拟状态、当前索引和时间戳,用于控制模拟流程的启停与节奏。
  • 回车键触发模拟:监听K_RETURN的KEYDOWN事件,启动模拟流程。
  • 生成模拟按键事件:通过pygame.event.post()创建并发送KEYDOWN事件,让主循环的事件处理逻辑可以像处理真实按键一样响应。
  • 控制模拟间隔:使用pygame.time.get_ticks()记录上次发送事件的时间,确保每个按键模拟之间有固定间隔,避免一次性输出所有信息。

内容的提问来源于stack exchange,提问作者BH10001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:35:06