Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pygame Display Position

Tags:

python

pygame

I need the window position right after I created a pygame window:

window = pygame.display.set_mode((width, height), 0, 32)
pygame.init()

By default, the window starts at 0,0 - but I also need x,y if the user changes the window position. Any ideas?

like image 923
dmorlock Avatar asked Nov 09 '10 16:11

dmorlock


3 Answers

It have worked for me :

import os
import pygame
x = 100
y = 45
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (x,y)
pygame.init()
screen = pygame.display.set_mode((100,100))

Taken from https://www.pygame.org/wiki/SettingWindowPosition

like image 39
Rudeboyz Squad Avatar answered Nov 13 '22 08:11

Rudeboyz Squad


I need x,y coords of the pygame window - either at start or on window move. The last one is nice to have.

I figured out how to center the pygame window at the bottom of the screen:

    pos_x = screen_width / 2 - window_width / 2
    pos_y = screen_height - window_height
    os.environ['SDL_VIDEO_WINDOW_POS'] = '%i,%i' % (pos_x,pos_y)
    os.environ['SDL_VIDEO_CENTERED'] = '0'

Background: I have x,y coords which are screen related and I must convert the screen coords into window-local coords so that I can use them e.g. to display coords inside the pygame window or to discard coords which are outside the pygame window.

With my approach above, I knwo the initial position. But I can only use a single pygame window (because it's always at the same position) and things go wrong if the user moves the window.

like image 131
dmorlock Avatar answered Nov 13 '22 07:11

dmorlock


Here is an example code that return all four corner positions:

from ctypes import POINTER, WINFUNCTYPE, windll
from ctypes.wintypes import BOOL, HWND, RECT


# get our window ID:
hwnd = pygame.display.get_wm_info()["window"]

# Jump through all the ctypes hoops:
prototype = WINFUNCTYPE(BOOL, HWND, POINTER(RECT))
paramflags = (1, "hwnd"), (2, "lprect")

GetWindowRect = prototype(("GetWindowRect", windll.user32), paramflags)

# finally get our data!
rect = GetWindowRect(hwnd)
print "top, left, bottom, right: ", rect.top, rect.left, rect.bottom, rect.right

# bottom, top, left, right:  644 98 124 644
like image 7
Alexandre Willame Avatar answered Nov 13 '22 08:11

Alexandre Willame