199 votes

Comment obtenir la résolution du moniteur en Python ?

Quel est le moyen le plus simple d'obtenir la résolution de l'écran (de préférence sous forme de tuple) ?

0 votes

Utilisez-vous une bibliothèque d'interfaces utilisateur particulière? (par exemple GTK, wxPython, Tkinter, etc)

14 votes

Avec le module Tkinter, vous pouvez le faire de cette manière. Il fait partie de la bibliothèque standard de Python et fonctionne sur la plupart des plateformes Unix et Windows.

1 votes

Une bonne vue d'ensemble des différentes techniques pour les interfaces utilisateur courantes est donnée à ce lien

155voto

jcao219 Points 1037

Sous Windows, vous pouvez également utiliser ctypes avec GetSystemMetrics():

import ctypes
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)

de sorte que vous n'ayez pas besoin d'installer le paquet pywin32 ; il ne nécessite rien qui ne soit pas fourni avec Python lui-même.

Pour les configurations multi-écrans, vous pouvez récupérer la largeur et la hauteur combinées du moniteur virtuel :

import ctypes
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(78), user32.GetSystemMetrics(79)

17 votes

Note importante : les valeurs renvoyées peuvent être incorrectes si le scaling DPI est utilisé (c'est souvent le cas sur les écrans 4k), vous devez appeler SetProcessDPIAware avant d'initialiser les composants GUI (et non avant d'appeler la fonction GetSystemMetrics). Cela est vrai pour la plupart des réponses ici (GTK, etc) sur la plateforme win32.

2 votes

Pour plusieurs moniteurs, vous pouvez utiliser GetSystemMetrics(78) et GetSystemMetrics(79)

0 votes

@Derek Que renvoient GetSystemMetrics(78) et GetSystemMetrics(79) ?

105voto

Robus Points 3499

Sous Windows :

from win32api import GetSystemMetrics

print("Largeur =", GetSystemMetrics(0))
print("Hauteur =", GetSystemMetrics(1))

Si vous travaillez avec un écran haute résolution, assurez-vous que votre interprète Python est HIGHDPIAWARE.

Basé sur ce message.

11 votes

Pour une solution complète multiplateforme, consultez cette réponse

4 votes

Lors de l'utilisation de plusieurs moniteurs, cela renverra uniquement la taille de l'écran principal.

7 votes

Comment définir l'interpréteur python pour être highdpiaware? Ce serait utile de l'inclure dans la réponse.

64voto

user2366975 Points 501

Extrait directement d'une réponse au post Comment puis-je obtenir la taille de l'écran en Tkinter?,

import tkinter as tk

root = tk.Tk()

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

12 votes

Si vous avez des affichages externes étendus à côté de l'écran principal, cette méthode donnerait la somme de toutes les résolutions des affichages, et non la résolution de l'affichage actuel.

0 votes

Pour une étape à écrans multiples, consultez ma réponse.

0 votes

Je vous recommande vivement de ne pas utiliser tkinter. J'ai perdu beaucoup de temps à réaliser que si vous définissez la résolution de votre écran à une certaine valeur dans Windows, mais que la taille du texte (comme défini dans les paramètres d'affichage dans Windows) n'est pas réglée à 100%, alors la valeur que vous obtenez de tkinter est mise à l'échelle par la taille de la police. Par exemple, une résolution de (3829, 2160), avec une taille de texte de 250%, sera signalée comme (1536, 86).

48voto

Ned Batchelder Points 128913

Si vous utilisez wxWindows (ayant installé wxPython), vous pouvez simplement le faire :

import wx

app = wx.App(False) # l'objet wx.App doit être créé en premier.
print(wx.GetDisplaySize())  # retourne un tuple

0 votes

C'est le meilleur... qui n'a pas wx? :) plus quelques lignes au lieu d'un tas de code sur vos yeux. C'est maintenant ma méthode par défaut, merci.

1 votes

Cela devrait être app = wx.App(False) sinon vous obtenez l'erreur "l'objet wx.App doit être créé en premier". 26 votes et personne n'a vérifié ? Est-ce que ça marche sous Windows sans assigner l'instance wx à une variable ?

5 votes

Qui n'a pas de wx? Beaucoup de gens?

23voto

cobbal Points 37900

Et pour être exhaustif, Mac OS X

import AppKit
[(screen.frame().size.width, screen.frame().size.height)
    for screen in AppKit.NSScreen.screens()]

vous donnera une liste de tuples contenant toutes les tailles d'écran (si plusieurs moniteurs sont présents)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X