In the game I'm making, I'm trying to move the window around the screen for a mini game (don't ask) and I've tried what I saw own threads and only found 1
x = 100
y = 0
import os
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (x,y)
import pygame
pygame.init()
screen = pygame.display.set_mode((100,100))
# wait for a while to show the window.
import time
time.sleep(2)
and it doesn't work (keep in mind I'm not super experienced and currently code as a hobby)
You can set the position of the window by using SDL environment variables before you initialise pygame. Environment variables can be set with the os. environ dict in python.
Move a rectangle with keysThe method move(v) creates a new Rect which has moved by a vector v . The method move_ip(v) moves a Rect in place. The following program uses the 4 arrow keys to move a rectangle around. The thin blue rectangle is the orignal one, the thick red rectangle is the moved one.
The same and lot easier approach is also available in PyGame of Python. Thus by using PyGame one can use multiple screens on PyGame.
Check out the below code. I kind of combined two different answers, but it seems like it will be pretty difficult without using Tkinter. Thankfully I don't think Tkinter will get in the way of your application too much (seemed to work pretty easily here).
# Moving a pygame window with Tkinter.
# Used code from:
# https://stackoverflow.com/questions/8584272/using-pygame-features-in-tkinter
# https://stackoverflow.com/questions/31797063/how-to-move-the-entire-window-to-a-place-on-the-screen-tkinter-python3
import tkinter as tk
import os, random
w, h = 400, 500
# Tkinter Stuffs
root = tk.Tk()
embed = tk.Frame(root, width=w, height=h)
embed.pack()
os.environ['SDL_WINDOWID'] = str(embed.winfo_id())
os.environ['SDL_VIDEODRIVER'] = 'windib' # This was needed to work on my windows machine.
root.update()
# Pygame Stuffs
import pygame
pygame.display.init()
screen = pygame.display.set_mode((w, h))
# This just gets the size of your screen (assuming the screen isn't affected by display scaling).
screen_full_size = pygame.display.list_modes()[0]
# Basic Pygame loop
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
done = True
if event.key == pygame.K_SPACE:
# Press space to move the window to a random location.
r_w = random.randint(0, screen_full_size[0])
r_h = random.randint(0, screen_full_size[1])
root.geometry("+"+str(r_w)+"+"+str(r_h))
# Set to green just so we know when it is finished loading.
screen.fill((0, 220, 0))
pygame.display.flip()
root.update()
pygame.quit()
root.destroy()
I've found a way of doing it without using tkinter
.
If you resize the display, it will jump to the location of os.environ['SDL_VIDEO_WINDOW_POS']
.
x=100
y=0
import os
os.environ['SDL_VIDEO_WINDOW_POS'] = '%d,%d' % (x,y)
#create a display
import pygame
pygame.init()
screen=pygame.display.set_mode((100,100))
#wait before moving the display
import time
time.sleep(2)
#set where the display will move to
x=200
y=200
os.environ['SDL_VIDEO_WINDOW_POS']='%d,%d' %(x,y)
#resize the screen causing it to move to x y set by environ
pygame.display.set_mode((101,100))
#set the size back to normal
pygame.display.set_mode((100,100))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With