关于pygame中全屏模式下按键q因系统默认中文输入法而无法执行功能的困惑!(语言-python)


import pygame
import sys
import setting

pygame.init()

'主窗口'
screen_image = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
screen_rect = screen_image.get_rect()

'标题栏'
pygame.display.set_caption('Alien Qu Letian Invasion')

'曲乐天天帝一号飞船'
qlt_image = pygame.image.load('images/qlt.bmp')
qltsr_image = pygame.transform.scale(qlt_image, (90, 60))
qltsr_rect = qltsr_image.get_rect()
qltsr_rect.midbottom = screen_rect.midbottom
moving_left = False
moving_right = False

'子弹'
bullets = pygame.sprite.Group()

'死循环'
while True:
# 捕获键盘鼠标操作,按了退出按钮程序立刻结束
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            ###########################
            if event.key == pygame.K_F1:
                pygame.quit()
                sys.exit(0)
            if event.key == pygame.K_LEFT:
                moving_left = True
            if event.key == pygame.K_RIGHT:
                moving_right = True
            if event.key == pygame.K_SPACE:
                if len(bullets) < setting.bullets_allowed:
                    new_bullet = pygame.sprite.Sprite()  
                    new_bullet.rect = pygame.Rect(0, 0, 3, 15)     # type: ignore
                    new_bullet.rect.midbottom = qltsr_rect.midtop   # type: ignore
                    bullets.add(new_bullet)

        elif event.type == pygame.KEYUP:
            print(event)
            if event.key == pygame.K_LEFT:
                moving_left = False
            if event.key == pygame.K_RIGHT:
                moving_right = False

    '飞船随开关移动'
    if moving_left and qltsr_rect.left > 0:
        qltsr_rect.x -= setting.qltsr_speed
    if moving_right and qltsr_rect.right < screen_rect.right:
        qltsr_rect.x += setting.qltsr_speed
        
    '绘制图像'
    screen_image.fill(setting.bg_color1)
    screen_image.blit(qltsr_image, (qltsr_rect))
    pygame.display.flip()

    for bullet in bullets:
        pygame.draw.rect(screen_image, setting.bg_color2, bullet.rect)
        bullet.rect.y -= 1
        if bullet.rect.bottom < 0:
           bullets.remove(bullet)
    pygame.display.flip()

我的困惑是在“#”下面那三行:
因为我的本意是在全屏模式下按键q可以程序退出,母版本是我仅仅用了:


```python


sys.exit()
```python

pygame.key.set_mods(pygame.KMOD_CAPS)

仍然不能成功,我就删除了该段代码又添加了:


```python



```pygame.quit()

但是仍然不能成功,查阅资料了一个晚上也没有什么好的好的理解,如果按键F1退出倒是很容易解决,但如果我只想按键q退出,有什么好的思路建议嘛?万分感谢。

中文输入法不行就换成英文输入法,试试

中文输入法状态下无法触发KEYDOWN,转换成英文输入法才可以。可以通过环境变量显示输入法候选框,这样用户可以知道是中文输入法的问题。

import os
os.environ["SDL_IME_SHOW_UI"] = "1"

详见https://blog.csdn.net/qq_48979387/article/details/128784116 (7.4)

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

安装一个pyautogui模块吧,使用函数自动按下Windows+空格热键,退出时再调用一下,就好了,我就是这样解决的;或者把输入法关掉,因为英文输入法可能也会霸占键盘输入。
希望可以帮助你,pyautogui模块详细请查必应。