1

現在、PySDL2 で作成したウィンドウが既にレンダリングされた後、ウィンドウの位置を変更しようとしています。

Window.positionWindowの属性を更新してみました。しかし、これを実行し、サーフェス自体をリフレッシュしても、変化は見られません。(ウィンドウは最初に描画された場所にとどまります)。

ただし、ウィンドウの位置を変更できることはわかっています。ウィンドウの作成行の位置を変更すると、最初に画面に描画されたときに変更されるからです。(後から変更することはできないようです)

コード:

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 属性を更新することです。しかし、先に述べたように、何も起こらないようです。

編集:このブログ投稿によると。それはほとんど不可能です。

4

1 に答える 1

2

バージョン 0.9.2 まで、 PySDL2 の Window クラスには position 属性がありません。これが、コードが機能しない理由です。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)

ウィンドウの配置がサポートされていれば、機能するはずです。

于 2014-07-07T10:34:48.780 に答える