Was ist der einfachste Weg, um die Monitorauflösung zu erhalten (vorzugsweise in einem Tupel)?
python
screen
resolution
Rechteck
quelle
quelle
Tkinter
Modul können Sie dies auf diese Weise tun . Es ist Teil der Standard-Python-Bibliothek und funktioniert auf den meisten Unix- und Windows-Plattformen.Antworten:
Unter Windows:
Wenn Sie mit einem hochauflösenden Bildschirm arbeiten, stellen Sie sicher, dass Ihr Python-Interpreter HIGHDPIAWARE ist.
Basierend auf diesem Beitrag.
quelle
highdpiaware
? Dies wäre nützlich, um es in die Antwort aufzunehmen.In Windows können Sie ctypes auch verwenden mit
GetSystemMetrics()
:damit Sie das pywin32-Paket nicht installieren müssen; Es braucht nichts, was nicht mit Python selbst geliefert wird.
Bei Multi-Monitor-Setups können Sie die kombinierte Breite und Höhe des virtuellen Monitors abrufen:
quelle
GetSystemMetrics(78)
undGetSystemMetrics(79)
zurück?Ich habe aus diesem Grund ein PyPI-Modul erstellt :
Der Code:
Ergebnis:
Es unterstützt Umgebungen mit mehreren Monitoren . Ihr Ziel ist es, plattformübergreifend zu sein. Im Moment unterstützt es Cygwin und X11, aber Pull-Anfragen sind absolut willkommen.
quelle
pip install cython pyobjus
), bevor ich es unter OSX verwenden konnteWenn Sie wxWindows verwenden, können Sie einfach Folgendes tun:
quelle
app = wx.App(False)
Sie bekommen sonst das „das wx.App Objekt muss erst geschaffen werden.“ Error. 26 Stimmen und niemand hat nachgesehen? Funktioniert es unter Windows, ohne einer Variablen eine wx-Instanz zuzuweisen?Entnommen direkt aus einer Antwort auf diesen Beitrag: Wie erhalte ich die Bildschirmgröße in Tkinter?
quelle
Unter Windows 8.1 erhalte ich weder von ctypes noch von tk die richtige Auflösung. Andere Benutzer haben das gleiche Problem bei ctypes: getsystemmetrics gibt eine falsche Bildschirmgröße zurück. Um die korrekte volle Auflösung eines Monitors mit hoher DPI unter Windows 8.1 zu erhalten, muss SetProcessDPIAware aufgerufen und der folgende Code verwendet werden:
Vollständige Details unten:
Ich habe herausgefunden, dass dies daran liegt, dass Windows eine skalierte Auflösung meldet. Es scheint, dass Python standardmäßig eine "System-dpi-fähige" Anwendung ist. Hier sind Arten von DPI-fähigen Anwendungen aufgeführt: http://msdn.microsoft.com/en-us/library/windows/desktop/dn469266%28v=vs.85%29.aspx#dpi_and_the_desktop_scaling_factor
Anstatt Inhalte in voller Monitorauflösung anzuzeigen, wodurch Schriftarten winzig werden, wird der Inhalt grundsätzlich vergrößert, bis die Schriftarten groß genug sind.
Auf meinem Monitor wird Folgendes angezeigt:
Physikalische Auflösung: 2560 x 1440 (220 DPI)
Gemeldete Python-Auflösung: 1555 x 875 (158 DPI)
Auf dieser Windows-Website: http://msdn.microsoft.com/en-us/library/aa770067%28v=vs.85%29.aspx Die Formel für die gemeldete effektive Systemauflösung lautet: (gemeldete_px * aktuelle_dpi) / (96 dpi ) = Physical_px
Ich kann die richtige Vollbildauflösung und die aktuelle DPI mit dem folgenden Code erhalten. Beachten Sie, dass ich SetProcessDPIAware () aufrufe, damit das Programm die tatsächliche Auflösung sehen kann.
Was zurückkam:
Ich verwende Windows 8.1 mit einem 220 DPI-fähigen Monitor. Meine Anzeigeskalierung setzt meine aktuelle DPI auf 158.
Ich werde die 158 verwenden, um sicherzustellen, dass meine Matplotlib-Plots die richtige Größe haben mit: vom Pylab-Import rcParams rcParams ['figure.dpi'] = curr_dpi
quelle
Tkinter
, dass korrekte Pixel verwendet werden, ist sich jedoch der dpi-Skalierung nicht bewusst, sodass falsche mm-Größen gemeldet werden.ctypes.windll.shcore.SetProcessDpiAwareness(2)
Fehler zurückOSError: [WinError 126] The specified module could not be found
.Und der Vollständigkeit halber Mac OS X.
gibt Ihnen eine Liste von Tupeln mit allen Bildschirmgrößen (wenn mehrere Monitore vorhanden sind)
quelle
Wenn Sie das
Qt
Toolkit speziell verwendenPySide
, können Sie Folgendes tun:quelle
Unter Linux ist es am einfachsten, den Befehl bash auszuführen
und analysieren Sie die Ausgabe mit Regexp.
Sie können dies auch über PyGame tun: http://www.daniweb.com/forums/thread54881.html
quelle
Hier ist ein kurzes kleines Python-Programm, das Informationen zu Ihrem Multi-Monitor-Setup anzeigt:
Hier ist ein Beispiel für die Ausgabe:
quelle
gtk.Window()
dasgdk_default_root_window
? Sind Sie so sicher, dass.get_screen
alle Monitore enthalten sind?gtk.Window()
wird ein neues Fenster erstellt (siehe hier ). Das Fenster ist nur eine Möglichkeitget_screen
, um die Monitorinformationen abzurufen. Es gibt den Bildschirm zurück, auf dem sich das Fenster befindet (oder wäre, wenn es jemals angezeigt würde). Ich denke, es hängt von der X-Konfiguration ab, ob dieser "Bildschirm" alle "Monitore" enthält. Es funktioniert auf meinem System mit Twinview.Ich verwende eine get_screen_resolution-Methode in einem meiner Projekte wie dem folgenden, bei dem es sich im Grunde um eine Importkette handelt. Sie können dies gemäß Ihren Anforderungen ändern, indem Sie die nicht benötigten Teile entfernen und die Anschlüsse in der Kette mit größerer Wahrscheinlichkeit nach oben verschieben.
quelle
Alte Frage, aber das fehlt. Ich bin neu in Python. Bitte sagen Sie mir, ob dies eine "schlechte" Lösung ist. Diese Lösung wird nur für Windows und MacOS unterstützt und funktioniert nur für den Hauptbildschirm - aber das Betriebssystem wird in der Frage nicht erwähnt.
Messen Sie die Größe, indem Sie einen Screenshot machen. Da sich die Bildschirmgröße nicht ändern sollte, muss dies nur einmal durchgeführt werden. Es gibt elegantere Lösungen, wenn Sie ein GUI-Toolkit wie GTK, wx, ... installiert haben.
siehe Kissen
quelle
XWindows-Version:
quelle
Erweitern Sie die Antwort von @ user2366975 , um die aktuelle Bildschirmgröße in einem Multi-Screen-Setup mit Tkinter (Code in Python 2/3) zu erhalten:
(Sollte plattformübergreifend funktionieren, nur unter Linux getestet)
quelle
Versuchen Sie den folgenden Code:
quelle
Wenn Sie PyQt4 installiert haben, versuchen Sie den folgenden Code:
Für PyQt5 funktioniert Folgendes:
quelle
Eine plattformübergreifende und einfache Möglichkeit, dies zu tun, ist die Verwendung von TKinter, das mit fast allen Python-Versionen geliefert wird, sodass Sie nichts installieren müssen:
quelle
Verwenden von Linux Anstelle von regulärem Ausdruck nehmen Sie die erste Zeile und die aktuellen Auflösungswerte heraus.
Aktuelle Auflösung der Anzeige: 0
Dies wurde unter xrandr 1.3.5 durchgeführt. Ich weiß nicht, ob die Ausgabe in anderen Versionen unterschiedlich ist, aber dies sollte es einfacher machen, dies herauszufinden.
quelle
So erhalten Sie Bits pro Pixel:
Parameter in gdi32:
quelle
Versuchen Sie pyautogui:
quelle
Eine andere Version mit
xrandr
:quelle
Mit pygame :
[1]
Wenn Sie jedoch versuchen, Ihr Fenster auf die Größe des Bildschirms einzustellen, möchten Sie möglicherweise nur Folgendes tun:
um Ihr Display in den Vollbildmodus zu versetzen. [2]
quelle
Sie könnten PyMouse verwenden . Um die Bildschirmgröße zu erhalten, verwenden Sie einfach das
screen_size()
Attribut:a
gibt ein Tupel zurück,(X, Y)
woX
ist die horizontale Position undY
die vertikale Position ist.Link zur Funktion in der Dokumentation.
quelle
Wenn Sie unter Windows arbeiten, können Sie das Betriebssystemmodul verwenden, um es abzurufen:
Es wird ein Tupel (Y, X) zurückgegeben, wobei Y die vertikale Größe und X die horizontale Größe ist. Dieser Code funktioniert unter Python 2 und Python 3
quelle
Unter Linux können wir ein Unterprozessmodul verwenden
quelle
Es ist ein wenig lästig für Retina-Bildschirm, ich benutze tkinter, um die falsche Größe zu erhalten, benutze Pilllow Grab, um die richtige Größe zu erhalten:
quelle
Für spätere Versionen von PyGtk:
quelle
Für Linux können Sie Folgendes verwenden:
quelle
Hilfsskript mit
pynput
Bibliothek. Posting hier für Ref.:quelle