精华内容
下载资源
问答
  • 功能:设置按键退出python pygame动画(animation)程序,python3.6检测键盘按键 pygame运行起来,不弄个强行终止都刹不住。。。。为此研究了一下怎么退出。 实现的效果是:按D键立即退出!!!其他键可以依键码...

    功能:设置按键退出python pygame动画(animation)程序,python3.6检测键盘按键

     

    pygame运行起来,不弄个强行终止都刹不住。。。。为此研究了一下怎么退出。

    实现的效果是:按D键立即退出!!!其他键可以依键码进行设置。

    # 将一个有完整图片路径的列表,展示为动画
    def show_animation(animation_size=[960, 540], imgs_list_to_animate):
        num = len(imgs_list_to_animate) # img_list类似于 ['/home/user/1.jpg', ...]
    
        # 初始化
        pygame.init()
    
        # 创建窗口
        window = pygame.display.set_mode(animation_size)
    
        # 设置窗口标题
        pygame.display.set_caption('title')
    
        names = locals()  # locals() 函数会以字典类型返回当前位置的全部局部变量
        balls = []
    
        for i in range(num):
            frame = pygame.image.load(imgs_list_to_animate[i])
            frame = pygame.transform.scale(frame, tuple(animation_size), )
            names['bg_image%s' % i] = frame
            balls.append(names['bg_image%s' % i])
    
        # 第一组文字
        color_green = (255, 0, 0)
    
        # 创建一个Font对象,其中LOWRBI__.TTF为下载的字体库
        fontObj = pygame.font.SysFont('宋体', 20)
    
        # 创建一个存放文字surface对象,
        textSurfaceObj = fontObj.render(u'Start Frame', False, color_green)
    
        # 文字图像位置
        textRectObj = textSurfaceObj.get_rect()
    
        # print("Press 'D' to exit...")
    
        running = True
        while running:
            print('balls num=', len(balls)) # balls num= 70
            events = pygame.event.get()
            print('events num=', len(events))
    
            for i in range(num):
                window.blit(balls[i], (0, 0))
                if i == 0:
                    window.blit(textSurfaceObj, textRectObj)
                print('i=%d/%d' % (i, num))
    
                pygame.display.update()  # 刷新窗口
                for event in events:
                    if event.type == KEYDOWN:
                        if str(event.key) == '100': # 按 D 键(键码100)会立即退出当前动画显示程序
                            # break # 这里用break不会起作用
                            print('收到KEYDOWN按键:', str(event.key)) # str(event.key) 显示键码
                            running = False 
    
                    --------# 检测 QUIT : 如果 QUIT, 终止主循环。这部分代码可以不用-------------
                    elif event.type == QUIT:
                        print('收到QUIT按键:', str(event.key))
                        running = False 
                    --------# 检测 QUIT : 如果 QUIT, 终止主循环。这部分代码可以不用-------------
    
                    if running == False: # 退出最内层 for event 循环
                        break
                if running == False: # 退出外层 for i in range循环
                    break
            if running == False: # 退出 pygame,作用与 pygame.init相反
                pygame.quit()

    感谢:

    https://stackoverflow.com/questions/19882415/closing-pygame-window

    https://blog.csdn.net/feynman233/article/details/88827994

    展开全文
  • python 检测键盘按键,随时停止程序

    千次阅读 2020-04-20 14:41:03
    \n") @set_timeout(2, after_timeout) # 限时 2 秒超时 def press_pause(): key = readkey() return key if __name__ == '__main__': while True: # 检测按键,停止训练,保存当前模型和最佳模型 key = press_pause...

    不是我原创的,但是原文我已经找不到在哪了。侵删。

    很好用的函数。Linux ubuntu下可用。可能不适用于win10环境和多进程(非终端环境)环境。多进程的按键停止方法见:https://blog.csdn.net/qxqxqzzz/article/details/105642875

    import sys
    import tty
    import termios
    import signal
    import time
    
    def readchar():
        fd = sys.stdin.fileno()
        old_settings = termios.tcgetattr(fd)
        try:
            tty.setraw(sys.stdin.fileno())
            ch = sys.stdin.read(1)
        finally:
            termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
        return ch
    
    def readkey(getchar_fn=None):
        getchar = getchar_fn or readchar
        c1 = getchar()
        if ord(c1) != 0x1b:
            return c1
        c2 = getchar()
        if ord(c2) != 0x5b:
            return c1
        c3 = getchar()
        return chr(0x10 + ord(c3) - 65)
    
    def set_timeout(num, callback):
        def wrap(func):
            def handle(signum, frame):  # 收到信号 SIGALRM 后的回调函数,第一个参数是信号的数字,第二个参数是the interrupted stack frame.
                raise RuntimeError
    
            def to_do(*args, **kwargs):
                try:
                    signal.signal(signal.SIGALRM, handle)  # 设置信号和回调函数
                    signal.alarm(num)  # 设置 num 秒的闹钟
                    print('press e to stop this program...')
                    r = func(*args, **kwargs)
                    print('Detected Key pressed.\n')
                    signal.alarm(0)  # 关闭闹钟
                    return r
                except RuntimeError as e:
                    callback()
    
            return to_do
    
        return wrap
    
    
    def after_timeout():  # 超时后的处理函数
        print("No key pressed!\n")
    
    @set_timeout(2, after_timeout)  # 限时 2 秒超时
    def press_pause():
        key = readkey()
        return key
    
    
    
    if __name__ == '__main__':
        while True:
            # 检测按键,停止训练,保存当前模型和最佳模型
            key = press_pause()
            if key != None:
                print(key+'\n')
                if key == 'e':
                    print('exit')
                    break
            time.sleep(1)

     

    展开全文
  • key = press_pause() if key == 'p': print('Save model and exit...') // TODO break else: pass 其他方案: python 检测键盘按键,随时停止程序 多进程中检测键盘输入,终止进程的方案: python ...

    试了很多方案都不行或者不好用。win10+linux可以用的方法有pygame和termios

    pygame方法参考:https://blog.csdn.net/qxqxqzzz/article/details/103315053

    本文介绍termios方法,亲测可用

    感谢:https://blog.csdn.net/qq_40930675/article/details/84667762

    安装:

    # termios可能不支持windows. 以下为ubuntu安装termios, 仅供参考.
    sudo apt-get update
    sudo apt-get install ruby-termios

    检测:

    import sys
    import tty
    import termios
    
    def readchar():
    	fd = sys.stdin.fileno()
    	old_settings = termios.tcgetattr(fd)
    	try:
    		tty.setraw(sys.stdin.fileno())
    		ch = sys.stdin.read(1)
    	finally:
    		termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
    	return ch
    
    def readkey(getchar_fn=None):
    	getchar = getchar_fn or readchar
    	c1 = getchar()
    	if ord(c1) != 0x1b:
    		return c1
    	c2 = getchar()
    	if ord(c2) != 0x5b:
    		return c1
    	c3 = getchar()
    	return chr(0x10 + ord(c3) - 65)
    
    while True:
    	key=readkey()
    	if key=='w':
    		print('w')
    	if key=='a':
    		print('a')
    	if key=='s':
    		print('s')
    	if key=='d':
    		print('d')
    	if key=='q':
    		break

    超时两秒后显示超时,继续执行程序:

    感谢:https://blog.csdn.net/dcrmg/article/details/82850457

    import signal
    
    def set_timeout(num, callback):
        def wrap(func):
            def handle(signum, frame):  # 收到信号 SIGALRM 后的回调函数,第一个参数是信号的数字,第二个参数是the interrupted stack frame.
                raise RuntimeError
    
            def to_do(*args, **kwargs):
                try:
                    signal.signal(signal.SIGALRM, handle)  # 设置信号和回调函数
                    signal.alarm(num)  # 设置 num 秒的闹钟
                    print('waiting for press key...')
                    r = func(*args, **kwargs)
                    print('Key pressed.')
                    signal.alarm(0)  # 关闭闹钟
                    return r
                except RuntimeError as e:
                    callback()
    
            return to_do
    
        return wrap
    
    
    def after_timeout():  # 超时后的处理函数
        print("Time out!")
    
    @set_timeout(2, after_timeout)  # 限时 2 秒超时
    def press_pause():
        key = readkey()
        return key
    
    
    # 主程序中:
    # from xxx import press_pause
    # 检测按键,停止训练,保存当前模型和最佳模型
    def train_one_epoch():
    	key = press_pause()
    	if key == 'p':
    	    print('Save model and exit...')
    	    // TODO
    	    break
    	else:
    	    pass

    其他方案: python 检测键盘按键,随时停止程序

    多进程中检测键盘输入,终止进程的方案:

    python multiprocessing多进程按键检测,优雅地终止多进程(signal信号量和pynput等多种方法)

    展开全文
  • Python按键检测方法汇总

    千次阅读 2020-06-24 13:48:17
    文章目录signal信号量, pynputtermios, signaltty, termiospygameopencv通过SSH协议给python多进程转发按键 ...signal信号量, pynput python multiprocessing多进程按键检测,优雅地终止多进程...python检测键盘输入ter
    展开全文
  • python检测键盘(上下左右) 代码

    万次阅读 2019-03-17 16:37:10
    保存下来,方便以后使用 # 获取事件,比如按键等 for event in pygame.event.get(): # 判断是否是点击了退出按钮 if event.type == QUIT: print("exit") exit() ...
  • 离子numworks 一个小的python模块,允许您链接模块,从而可以检测按键,离子和键盘
  • #coding=utf-8 import pygame ... 用来检测事件,比如按键操作 ''' if __name__ == "__main__": #1. 创建一个窗口,用来显示内容 screen = pygame.display.set_mode((480,890),0,32) #2. 创...
  • #coding=utf-8 ... 用来检测事件,比如按键操作 ''' def main(): #1. 创建一个窗口,用来显示内容 screen = pygame.display.set_mode((400,654),0,32) #2. 创建一个和窗口大小的图片,用来充当背景...
  • 一个简单的跨平台Python 2/3模块,用于检测鼠标和键盘输入。 注意:此模块正在建设中,尚待解决。 安装 pip install pykeymouse 用法示例 获取自上次调用pykeymouse.get()以来发生的所有事件: >>> import ...
  • #Python下在windows系统下仿照按键精灵 功能:找到对应软件程序,并对界面进行操作,主要进行点击、信息输入、输出信息得检测 ##所用到得库 库名 作用 win32gui gui调用 win32api 调用wins功能接口 win...
  • 使用pyHook可以实现检测键盘的每个按键,并区分左右Ctrl、shift、win等,以及区分主键盘数字和小键盘数字等。 本来很简单的东西,网上很多文章一堆东西甩在哪,很难看懂,让人感觉有多难。其实就这么简单的几行就...
  • Python游戏-实现键盘控制功能

    千次阅读 多人点赞 2019-05-28 10:19:46
    利用pygame模块的key.get_pressed()方法,来检测按键是否按下 key_press =pygame.key.get_pressed() if not key_press[K_UP] and ball.rect.bottom < height: ball.movedown() elif key_p...
  • 当多个事件绑定了同一个命令,那么在命令内部根据不同的事件进行处理的时候,怎么确定哪个事件发生了呢,用下面的来检测,经过测试处理tab键和alt键不能识别,其他单个都能被识别。 还有个事件的type属性,这个经过...
  • 当多个事件绑定了同一个命令,那么在命令内部根据不同的事件进行处理的时候,怎么确定哪个事件发生了呢,用下面的来检测,经过测试处理tab键和alt键不能识别,其他单个都能被识别。还有个事件的type属性,这个经过...
  • Python游戏

    2019-09-30 22:29:35
    要想实现键盘控制作用,就需要给游戏键盘监听事件利用pygame模块的key.get_pressed()方法,来检测按键是否按下 key_press =pygame.key.get_pressed() if not key_press[K_UP] and ball.rect.bottom < height: ...
  • 源码和图片都在里面了,可以检测持续按键让飞机一直移动,不用每按下一次键盘才让飞机动一下,那样会使人崩溃,注释也写好了,有什么不懂的欢迎留言提问
  • 2、 处理事件的代码称为事件处理器3、 Pygame使用KEYDOWN事件来检测按键是否按下。4、 Pos属性会指出事件发生时鼠标所在的位置5、 要为用户事件得到下一个可用的事件编号,可以使用pygame.NUMEVENTS。6、 要创建一个...
  • 2、 处理事件的代码称为事件处理器3、 Pygame使用KEYDOWN事件来检测按键是否按下。4、 Pos属性会指出事件发生时鼠标所在的位置5、 要为用户事件得到下一个可用的事件编号,可以使用pygame.NUMEVENTS。6、 要创建一个...
  • 当你插入它时,pIRkey显示为一个三重设备:用于存储代码的USB磁盘驱动器,用于调试的USB串行和Python交互式命令行,以及可以传输按键或鼠标移动的USB键盘/鼠标。 默认情况下,我们附带一些非常简单的示例代码来读取...
  • OpenCV官方教程中文版(For Python

    千次阅读 2019-02-16 16:11:47
    特定的几毫秒之内,如果 按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。如果没 有键盘输入,返回值为 -1,如果我们设置这个函数的参数为 0,那它将会无限 期的等待键盘输入。它也可以被用来检测...
  • 3、 Pygame使用KEYDOWN事件来检测按键是否按下。 4、 Pos属性会指出事件发生时鼠标所在的位置 5、 要为用户事件得到下一个可用的事件编号,可以使用pygame.NUMEVENTS。 6、 要创建一个定时器,可以使用pygame....
  • 搭建界面和键盘检测 添加背景音乐 运行优化 控制玩具飞机-面向过程 控制玩具飞机-面向对象 玩家飞机发射子弹 显示敌机 敌机发射子弹 抽象基类 plane pro需求的描述 存在四个对象: 我方飞机,敌方飞机,我方子弹,...
  • 该软件将监视启动后的状态,监视按键键盘的状态,一旦检测到某个键,它将捕捉照片并将其发送到您的配置电子邮件中。 该应用程序仅接受gmail,如果您的gmail未配置为第三方应用程序,请按照以下说明进行操作。 ...
  • evcape是一个小型守护程序,它使用linux输入子系统侦听键盘事件,并使用简单的规则来检测模式并采取相应的操作。 它使用evdev , udev和uinput ,因此可以与wayland并在控制台上一起使用,这与evcape的灵感xcape ...
  • ✅ KeyGenius:用来定时按下某个按键。比如 Ctrl + S,免得忘记保存 - 更多介绍 Librejo 我的书:一个图书笔记借阅管理的网站 - 更多介绍 ✅ Markdown Image:VSCode 扩展,直接复制粘贴即可在 Markdown 文件...
  • Time will tell. Monkey 是 Android SDK ... 通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。 Android 官方自动化测试领域这只 “猴子”.

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

python检测键盘按键

python 订阅