MudPhud
MudPhud

Reputation: 123

pygame dual monitors and fullscreen

I am using pygame to program a simple behavioral test. I'm running it on my macbook pro and have almost all the functionality working. However, during testing I'll have a second, external monitor that the subject sees and the laptop monitor. I'd like to have the game so up fullscreen on the external monitor and not on the laptop's monitor so that I can monitor performance. Currently, the start of the file looks something like:

#! /usr/bin/env python2.6

import pygame
import sys

stdscr = curses.initscr()
pygame.init()
screen = pygame.display.set_mode((1900, 1100), pygame.RESIZABLE)

I was thinking of starting the game in a resizable screen, but that OS X has problems resizing the window.

Upvotes: 6

Views: 9125

Answers (4)

boolVar
boolVar

Reputation: 1

display = pyglet.canvas.get_display()
display = display.get_screens()

win = pyglet.window.Window(screen=display[1])

------------------------------------------------------
screen=display[Номер монитора]

------------------------------------------------------
display = pyglet.canvas.get_display()
display = display.get_screens()

print(display) # Все мониторы которые есть

Upvotes: 0

Wissam Ouhib
Wissam Ouhib

Reputation: 1

I did something silly but it works.

i get the number of monitors with get_monitors() than i use SDL to change the pygame window's display position by adding to it the width of the smallest screen, to be sure that the window will be positionned in the second monitor.

from screeninfo import get_monitors

numberOfmonitors = 0
smallScreenWidth = 9999

for monitor in get_monitors():
    #getting the smallest screen width
    smallScreenWidth = min(smallScreenWidth, monitor.width)
    numberOfmonitors += 1

if numberOfmonitors > 1:
    x = smallScreenWidth
    y = 0
    #this will position the pygame window in the second monitor
    os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (x,y)

#you can check with a small window
#screen = pygame.display.set_mode((100,100))
#or go full screen in second monitor
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
#if you want to do other tasks on the laptop (first monitor) while the pygame window is being displayed on the second monitor, you shoudn't use fullscreen but instead get the second monitor's width and heigh using monitor.width and monitor.height, and set the display mode like
screen = pygame.display.set_mode((width,height))

Upvotes: 0

Evan P.
Evan P.

Reputation: 29

I do not know if you can do this in OS X, but this is worth mentioning for the Windows users out there, if you just want to have your program to run full screen on the second screen and you are on windows, just set the other screen as the main one.

The setting can be found under Rearrange Your Displays in settings.

So far for me anything that I can run on my main display can run this way, no need to change your code.

Upvotes: 0

coffeetocode
coffeetocode

Reputation: 1233

Pygame doesn't support two displays in a single pygame process(yet). See the question here and developer answer immediately after, where he says

Once SDL 1.3 is finished then pygame will get support for using multiple windows in the same process.

So, your options are:

  1. Use multiple processes. Two pygame instances, each maximized on its own screen, communicating back and forth (you could use any of: the very cool python multiprocessing module, local TCP, pipes, writing/reading files, etc)
  2. Set the same resolution on both of your displays, and create a large (wide) window that spans them with your information on one half and the user display on the other. Then manually place the window so that the user side is on their screen and yours is on the laptop screen. It's hacky, but might a better use of your time than engineering a better solution ("If it's studpid and it works, it ain't stupid" ;).
  3. Use pyglet, which is similar to pygame and supports full screen windows: pyglet.window.Window(fullscreen=True, screens[1])

Good luck.

Upvotes: 8

Related Questions