Quel est le moyen le plus simple d'obtenir la résolution du moniteur (de préférence dans un tuple)?
python
screen
resolution
rectangle
la source
la source
Tkinter
module, vous pouvez le faire de cette façon . Il fait partie de la bibliothèque Python standard et fonctionne sur la plupart des plates-formes Unix et Windows.Réponses:
Sous Windows:
Si vous travaillez avec un écran haute résolution, assurez-vous que votre interpréteur python est HIGHDPIAWARE.
Basé sur ce post.
la source
highdpiaware
? Cela serait utile à inclure dans la réponse.Sous Windows, vous pouvez également utiliser des ctypes avec
GetSystemMetrics()
:afin que vous n'ayez pas besoin d'installer le package pywin32; il n'a besoin de rien qui ne vient pas avec Python lui-même.
Pour les configurations multi-moniteurs, vous pouvez récupérer la largeur et la hauteur combinées du moniteur virtuel:
la source
GetSystemMetrics(78)
et queGetSystemMetrics(79)
revient?J'ai créé un module PyPI pour cette raison:
Le code:
Résultat:
Il prend en charge les environnements multi-moniteurs . Son objectif est d'être multiplateforme; pour l'instant, il prend en charge Cygwin et X11, mais les pull requests sont les bienvenues.
la source
pip install cython pyobjus
) avant de pouvoir l'utiliser sur OSXSi vous utilisez wxWindows, vous pouvez simplement faire:
la source
app = wx.App(False)
sinon vous obtenez le "l'objet wx.App doit être créé en premier." Erreur. 26 votes et personne n'a vérifié? Fonctionne-t-il sous Windows sans associer une instance wx à une variable?Tiré directement d'une réponse à ce post: Comment obtenir la taille de l'écran dans Tkinter?
la source
Sous Windows 8.1, je n'obtiens pas la résolution correcte de ctypes ou de tk. D'autres personnes ont le même problème pour les ctypes: getsystemmetrics renvoie une taille d'écran incorrecte Pour obtenir la résolution complète correcte d'un moniteur à haute résolution sur Windows 8.1, il faut appeler SetProcessDPIAware et utiliser le code suivant:
Détails complets ci-dessous:
J'ai découvert que c'est parce que Windows rapporte une résolution mise à l'échelle. Il semble que python soit par défaut une application «compatible avec le dpi système». Les types d'applications prenant en charge DPI sont répertoriés ici: http://msdn.microsoft.com/en-us/library/windows/desktop/dn469266%28v=vs.85%29.aspx#dpi_and_the_desktop_scaling_factor
Fondamentalement, plutôt que d'afficher le contenu à la résolution complète du moniteur, ce qui rendrait les polices minuscules, le contenu est mis à l'échelle jusqu'à ce que les polices soient suffisamment grandes.
Sur mon moniteur, j'obtiens:
Résolution physique: 2560 x 1440 (220 DPI)
Résolution python rapportée: 1555 x 875 (158 DPI)
Par ce site Windows: http://msdn.microsoft.com/en-us/library/aa770067%28v=vs.85%29.aspx La formule pour la résolution effective du système rapportée est: (rapporté_px * courant_dpi) / (96 dpi ) = physical_px
Je peux obtenir la bonne résolution plein écran et le DPI actuel avec le code ci-dessous. Notez que j'appelle SetProcessDPIAware () pour permettre au programme de voir la résolution réelle.
Qui a renvoyé:
J'utilise Windows 8.1 avec un moniteur compatible 220 DPI. La mise à l'échelle de mon affichage définit mon DPI actuel sur 158.
Je vais utiliser le 158 pour m'assurer que mes tracés matplotlib sont de la bonne taille avec: from pylab import rcParams rcParams ['figure.dpi'] = curr_dpi
la source
Tkinter
utilise des pixels corrects, mais n'est pas conscient de la mise à l'échelle en dpi, signalant ainsi des tailles en mm erronées.ctypes.windll.shcore.SetProcessDpiAwareness(2)
renvoie une erreurOSError: [WinError 126] The specified module could not be found
.Et pour être complet, Mac OS X
vous donnera une liste de tuples contenant toutes les tailles d'écran (si plusieurs moniteurs sont présents)
la source
Si vous utilisez
Qt
spécifiquement la boîte à outilsPySide
, vous pouvez effectuer les opérations suivantes:la source
En utilisant Linux, le moyen le plus simple est d'exécuter la commande bash
et analyser sa sortie en utilisant regexp.
Vous pouvez également le faire via PyGame: http://www.daniweb.com/forums/thread54881.html
la source
Voici un petit programme Python rapide qui affichera les informations sur votre configuration multi-moniteurs:
Voici un exemple de sa sortie:
la source
gtk.Window()
il legdk_default_root_window
? Est-ce ainsi que vous êtes certain qu'il.get_screen
contient tous les moniteurs?gtk.Window()
fait est de créer une nouvelle fenêtre (voir ici ). La fenêtre est juste un moyen d'utiliserget_screen
pour obtenir les informations du moniteur. Il renvoie l'écran sur lequel se trouve la fenêtre (ou serait, si elle était jamais affichée). Je suppose que cela dépend de la configuration X si cet "écran" contient tous les "moniteurs". C'est le cas sur mon système avec Twinview.J'utilise une méthode get_screen_resolution dans l'un de mes projets comme celui ci-dessous, qui est essentiellement une chaîne d'importation. Vous pouvez le modifier en fonction de vos besoins en supprimant les pièces inutiles et en déplaçant les ports les plus probables vers le haut dans la chaîne.
la source
Ancienne question mais cela manque. Je suis nouveau sur python, alors dites-moi s'il s'agit d'une "mauvaise" solution. Cette solution est uniquement prise en charge pour Windows et MacOS et ne fonctionne que pour l'écran principal - mais le système d'exploitation n'est pas mentionné dans la question.
Mesurez la taille en prenant une capture d'écran. Comme la taille de l'écran ne doit pas changer, cela ne doit être fait qu'une seule fois. Il existe des solutions plus élégantes si vous avez une boîte à outils d'interface graphique comme GTK, wx, ... installée.
voir oreiller
la source
Version XWindows:
la source
Expansion sur la réponse de @ user2366975 , pour obtenir la taille d'écran actuelle dans une configuration multi-écran en utilisant Tkinter (code en Python 2/3):
(Devrait fonctionner multiplateforme, testé sur Linux uniquement)
la source
Essayez le code suivant:
la source
Si PyQt4 est installé, essayez le code suivant:
Pour PyQt5, ce qui suit fonctionnera:
la source
Un moyen multiplateforme et simple de le faire consiste à utiliser TKinter qui est livré avec presque toutes les versions de python afin que vous n'ayez rien à installer:
la source
En utilisant Linux au lieu de regexp, prenez la première ligne et supprimez les valeurs de résolution actuelles.
Résolution actuelle de l'affichage: 0
Cela a été fait sur xrandr 1.3.5, je ne sais pas si la sortie est différente sur les autres versions, mais cela devrait le rendre facile à comprendre.
la source
Pour obtenir des bits par pixel:
paramètres dans gdi32:
la source
Essayez pyautogui:
la source
Une autre version utilisant
xrandr
:la source
Utilisation de pygame :
[1]
Cependant, si vous essayez de définir votre fenêtre à la taille de l'écran, vous voudrez peut-être simplement faire:
pour régler votre affichage en mode plein écran. [2]
la source
Vous pouvez utiliser PyMouse . Pour obtenir la taille de l'écran, utilisez simplement l'
screen_size()
attribut:a
renverra un tuple,,(X, Y)
oùX
est la position horizontale etY
la position verticale.Lien vers la fonction dans la documentation.
la source
Si vous travaillez sur le système d'exploitation Windows, vous pouvez utiliser le module du système d'exploitation pour l'obtenir:
Il renverra un tuple (Y, X) où Y est la taille verticale et X est la taille horizontale. Ce code fonctionne sur Python 2 et Python 3
la source
Sous Linux, nous pouvons utiliser le module de sous-processus
la source
C'est un peu gênant pour l'écran de la rétine, j'utilise tkinter pour obtenir la fausse taille, j'utilise pilllow grab pour obtenir la taille réelle:
la source
Pour les versions ultérieures de PyGtk:
la source
Pour Linux, vous pouvez utiliser ceci:
la source
Script utilitaire utilisant la
pynput
bibliothèque. Publier ici pour réf .:la source