微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一遍又一遍地生成相同的 pygame 事件

如何解决一遍又一遍地生成相同的 pygame 事件

在我的 pygame 应用程序中,我希望在用户按下 F1 键时打开网络浏览器:

#!/usr/bin/env python3

import pygame as pg
import webbrowser

pg.init()
screen = pg.display.set_mode((400,400))
pg.key.set_repeat(200,100)
while True:
    for evt in pg.event.get():
        if evt.type == pg.KEYDOWN and evt.key == pg.K_F1:
            webbrowser.open('http://some-website.com')
pg.quit()

按 F1 时,浏览器会打开,但如果我不杀死它,我的应用程序会不断打开新标签页。我的猜测是,当我的应用程序由于使用 KEYDOWN 而失去焦点时,会一遍又一遍地生成相同的 pg.key.set_repeat 事件:如果我将此调用注释为 pg.key.set_repeat 则一切正常。

我该如何解决

使用的版本是:pygame 2.0.1 (SDL 2.0.14,Python 3.9.5)

解决方法

您应该像这样使用 keyboard 模块:

import keyboard

# [...]

while True:

# [...]

    if keyboard.is_pressed("F1"):      
        webbrowser.open('http://some-website.com')
pg.quit()

或者你可以在打开特定网站后打破循环:

# [...]

while True:
    for evt in pg.event.get():
        if evt.type == pg.KEYDOWN and evt.key == pg.K_F1:
            webbrowser.open('http://some-website.com')
            break

# [...]

pg.quit()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。