与不相关的窗口有关的奇怪的SDL副作用

15

在使用pysdl2玩耍时,我注意到了这种奇怪的副作用:一旦sdl脚本运行,通常会变得半透明的不相关窗口现在保持不透明。

如果不是因为这让我有一种困扰的感觉,我就不会介意这些了,因为这表明我可能做错了某些根本性的事情。

有谁能告诉我这里到底出了什么问题?

以下是我的脚本:

import sdl2
import sdl2.ext as se
import time

def main():
    k = 2
    event_buffer = (k * sdl2.SDL_Event)()
    se.init()
    window = se.Window("what the ?", size=(400, 300))
    window.show()
    while True:
        window.refresh()
        time.sleep(0.01)
        sdl2.SDL_PumpEvents()
        sdl2.SDL_PeepEvents(event_buffer, k, sdl2.SDL_GETEVENT,
                            sdl2.SDL_FIRSTEVENT, sdl2.SDL_LASTEVENT)
        for event in event_buffer:
            if not event.type:
                continue
            elif event.type == sdl2.SDL_QUIT:
                se.quit()
                break
            else:
                pass
            event.type = 0
        else:
            continue
        break

if __name__ == '__main__':
    main()

这里有一个屏幕截图,分别是之前和之后的:

before

我的 KDE 5.45.0 桌面的“系统设置”窗口,在没有运行 sdl 脚本的情况下,显示相关设置桌面特效>透明度。请注意,当我拖动窗口时,窗口是半透明的。

after

相同的窗口但是在运行 sdl 脚本时。请注意,即使我大力拖动它,窗口仍然保持不透明。


1
你能在一个新的、干净的用户账户上重现吗? - genpfault
3
刚刚完成了。在另一台电脑上创建了一个新用户账户(操作系统相同),观察到相同情况。 - Paul Panzer
KDE 会话类型是 X11 还是 Wayland?Python 版本是多少?pysdl2 版本是多少?底层的 SDL2 版本是多少? - genpfault
1
@genpfault 这是Python 3.6.5 -- pysdl 0.9.6。在一台计算机上sdl2是2.0.0,在另一台计算机上是2.0.9。KDE会话我认为是X11(有一个kwin_x11进程正在运行,没有包含wayland这个词的内容)。 - Paul Panzer
1
也许相关:我看到一些使用SDL的游戏会使KDE特效被取消(并在游戏退出时重新激活)。 - JuanDeLosMuertos
显示剩余3条评论
1个回答

1

我也可以在我的Ubuntu桌面上使用Unity重现这个问题,所以这绝对不是你的KDE桌面的问题。我认为这是pysdl2中的一个bug,这个解决方案应该只是一个临时的解决方法,在它被修复之前,你可以在while循环中添加以下内容:

window.get_surface()

问题已在此处报告:https://github.com/marcusva/py-sdl2/issues/139

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接