15

当通过 pysdl2 玩 sdl2 时,我注意到了这种奇怪的副作用,一旦 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()

以下是屏幕抓取前后的画面:

前

KDE 5.45.0我的桌面的系统设置窗口没有运行sdl脚本,显示相关设置 Desktop Effects>Translucency。注意窗口是半透明的,因为我在拍照时拖动它。

后

相同但运行sdl脚本。请注意,尽管我大力拖动窗口,但它仍然顽固地不透明。

4

1 回答 1

1

我也可以用 Unity 在我的 Ubuntu 桌面上重现这个,所以这绝对不是你的 KDE 桌面的问题。我认为这是 pysdl2 中的一个错误,这个解决方案应该是一个临时解决方法,直到它得到修复,但与此同时,你可以在你的 while 循环中添加它:

window.get_surface()

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

于 2019-06-24T02:13:20.197 回答