在PySDL2中更新窗口位置(帮助!)

时间:2014-07-04 14:34:48

标签: python window pysdl2

我目前正在尝试更改我在PySDL2中创建的窗口的位置,之后它已经被渲染。

我已尝试更新窗口的Window.position属性。但是尽管这样做了,并且表面刷新了,但没有任何变化可见。 (窗口停留在最初绘制的位置)。

我知道我可以改变窗口位置,因为如果我改变窗口创建线中的位置,它会在最初在屏幕上绘制时改变。 (你似乎无法在之后改变它)

代码:

import sdl2
import sdl2.ext
import sys

White = sdl2.ext.Color(255,255,255)
Red = sdl2.ext.Color(153,0,0)

class Background(sdl2.ext.SoftwareSpriteRenderSystem):
    def __init__(self,window):
        super(Background,self).__init__(window)
        sdl2.ext.fill(self.surface,sdl2.ext.Color(0,33,66))



def main():
    sdl2.ext.init() # Initialze 
    world = sdl2.ext.World() # Create World
    W = sdl2.ext.Window("Default",size=(400,300), position = None,flags = sdl2.SDL_WINDOW_BORDERLESS) # Create Window


    BG = Background(W)
    world.add_system(BG)
    W.show()
    running = True
    while running:
        events = sdl2.ext.get_events()
        for event in events:
            if event.type == sdl2.SDL_QUIT:
                running = False
                break
            if event.type == sdl2.SDL_MOUSEBUTTONDOWN:
                X,Y = (300,100)                       # NEW COORDINATES
                print("Updating: . . ")
                W.position = X,Y                      # Updating the coordinates
                print(W.position)    
                W.hide()                       # Tried hiding and showing the window
                W.show()                       # Didn't help unfortunately
        W.refresh()   # Refresh the window. 
    return 0

if __name__ == "__main__":
    sys.exit(main())

我的尝试只是更新窗口的.position属性。但正如我之前所说,似乎没有任何事情发生。

编辑:根据this博客文章。这几乎是不可能的。

1 个答案:

答案 0 :(得分:2)

PySDL2's Window class没有版本0.9.2的位置属性。这就是为什么你的代码不起作用的原因。如果您直接使用SDL2的 SDL_SetWindowPosition()功能,则窗口可以定位,如果您的窗口管理器/操作系统支持它(对X11尤其重要,例如平铺窗口管理器) )

更改您的代码

print("Updating: . . ")
W.position = X,Y                      # Updating the coordinates
print(W.position)

print("Updating: . . ")
sdl2.SDL_SetWindowPosition(W.window, X, Y)

它应该可以工作,因为定位窗口是受支持的。