Wie bekomme ich die monitor-Auflösung in Python?
Was ist der einfachste Weg, um monitor-Auflösung (vorzugsweise in einem Tupel)?
Sind Sie mit einem UI-toolkit? (zB. GTK, wxPython, Tkinter, etc)
Mit der
Einen guten überblick über verschiedene Techniken für die gemeinsame UIs erhalten Sie unter diesen link
Mit der
Tkinter
- Modul, die Sie tun können, es, dieser Art. Es ist Teil der standard-Python-Bibliothek und funktioniert auf den meisten Unix-und Windows-Plattformen.Einen guten überblick über verschiedene Techniken für die gemeinsame UIs erhalten Sie unter diesen link
InformationsquelleAutor rectangletangle | 2010-06-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unter Windows:
Wenn Sie mit hoher Auflösung, stellen Sie sicher, dass Ihre python-interpreter HIGHDPIAWARE.
Basierend auf diese post.
Wenn Sie mehrere Monitore verwenden, diese liefern nur die Größe der primären Anzeige.
Wie legen Sie den python-interpreter zu
highdpiaware
? Dies wäre nützlich, um in die Antwort.InformationsquelleAutor Robus
In Windows können Sie auch mit ctypes mit
GetSystemMetrics()
:so dass Sie nicht brauchen, zu installieren der pywin32-Paket;
es muss nicht alles, was nicht kommen mit Python selbst.
Für multi-monitor-setups, die Sie abrufen können, die kombinierte Breite und Höhe des virtuellen Monitors:
Wichtiger Hinweis: die zurückgegebenen Werte können falsch sein, wenn die DPI-Skalierung verwendet (z.B.: oft bei 4k-displays), Sie zu rufen SetProcessDPIAware vor der Initialisierung der GUI-Komponenten (und nicht vor dem aufrufen der GetSystemMetrics-Funktion). Dies gilt für die meisten Antworten hier (GTK, etc) auf der win32-Plattform.
Für mehrere Monitore benutzen, können Sie GetSystemMetrics(78) und GetSystemMetrics(79)
Was bedeutet
GetSystemMetrics(78)
undGetSystemMetrics(79)
zurück?Die Breite/Höhe des virtuellen Bildschirms in Pixel. msdn.microsoft.com/en-us/library/windows/desktop/...
InformationsquelleAutor jcao219
Erstellte ich eine PyPI-Modul aus diesem Grund:
Code:
Ergebnis:
Es unterstützt multi-monitor-Umgebungen. Sein Ziel ist cross-Plattform; für jetzt ist es unterstützt Cygwin-X11, aber pull-requests sind Total willkommen.
Funktioniert gut auf Ubuntu. Getestet auf Ubuntu 16.04.
FYI, Windows DPI-Skalierung immer noch gilt. Diese Linie wird Ihnen sagen Windows Sie wollen die rohen, unskalierten Auflösung: "import ctypes; user32 = ctypes.windll.user32; user32.SetProcessDPIAware()". 1) Ihre Antwort sollte top sein; gute Arbeit. 2) Mein Kommentar ist Windows-spezifisch, nicht bibliotheksspezifischen (z.B. screeninfo) 3) code gerippt und getestet von KobeJohn Kommentar hier: stackoverflow.com/a/32541666/2616321
Praktisches Modul (+1). Ich hatte mit der Installation ein paar Anforderungen (z.B.
pip install cython pyobjus
), bevor ich es nutzen kann, obwohl auf OSXInformationsquelleAutor rr-
Wenn du mit wxWindows, Sie können einfach tun:
Das ist das beste... wer nicht haben wx? 🙂 plus ein paar Zeilen, statt ein Haufen von code auf Ihre Augen. Dies ist nun meine Standard-Methode, danke.
Dies sollte
app = wx.App(False)
sonst bekommen Sie die "wx.App-Objekt muss zuerst erstellt werden." - Fehler. 26 Stimmen und niemand hat, überprüfen? Funktioniert in Windows ohne assing wx-Instanz an eine variable?Wer nicht haben wx? Viele Menschen?
InformationsquelleAutor Ned Batchelder
Direkt aus eine Antwort zu diesem post: Wie man die Bildschirmgröße in Tkinter?
InformationsquelleAutor user2366975
Auf Windows 8.1 bin ich nicht immer die korrekte Auflösung von entweder ctypes oder die tk.
Andere Leute haben das gleiche problem für ctypes: getsystemmetrics gibt falsche Bildgröße
Um die richtige volle Auflösung von high-DPI-monitor auf windows 8.1, die muss man rufen SetProcessDPIAware und verwenden Sie den folgenden code:
Vollständigen Details Unter:
Fand ich heraus, dass dies ist, weil windows meldet einer skalierten Auflösung. Es wird angezeigt, dass python ist standardmäßig ein 'system dpi aware" - Anwendung. Arten von DPI aware Anwendungen sind hier aufgelistet:
http://msdn.microsoft.com/en-us/library/windows/desktop/dn469266%28v=vs.85%29.aspx#dpi_and_the_desktop_scaling_factor
Im Grunde, eher als Anzeige von Inhalten, die volle Auflösung des Monitors, die Schriften winzig, der Inhalt wird skaliert, bis die Schriften groß genug sind.
Auf meinem monitor, den ich bekommen:
Physikalische Auflösung: 2560 x 1440 (220 DPI)
Berichtet python-Auflösung: 1555 x 875 (158 DPI)
Pro das windows-Website: http://msdn.microsoft.com/en-us/library/aa770067%28v=vs.85%29.aspx
Die Formel für gemeldete system-effektive Auflösung:
(reported_px*current_dpi)/(96 dpi) = physical_px
Ich bin in der Lage zu Holen die richtige Vollbild-Auflösung, und die aktuelle DPI-mit dem code unten.
Beachten Sie, dass nenne ich SetProcessDPIAware (), um das Programm zu sehen, die echte Auflösung.
Welche zurückgegeben:
Ich bin mit windows 8.1 mit 220 DPI-fähigen monitor.
Mein display Skalierung setzt meine aktuelle DPI-bis 158.
Werde ich das 158 um sicherzustellen, dass meine matplotlib Grundstücke sind die richtige Größe mit:
from pylab import rcParams
rcParams['Abbildung.dpi'] = curr_dpi
Ich bearbeitet meine post zeigen, die Antwort in der Anfang, dann in die details. Vielen Dank für das feedback.
Es sieht aus wie es ein Fehler in den Berechnungen hier, was leicht zu erkennen ist es Berechnung einer diagonalen Größe von der gemeldeten Breite und Höhe (in Zoll). Mein Bildschirm mit 13,3 Zoll Diagonale wurde berichtet, als 15 Zoll. Es scheint
Tkinter
ist, mit richtigen Pixel, aber ist nicht bewusst, das die dpi-Skalierung damit die Berichterstattung falsch, mm-Größen.Dies funktioniert nicht auf Windows 10, da die SetSystemDPIAware() scheint nicht, einen Unterschied zu machen. Allerdings ruft ctypes.windll.shcore.SetProcessDpiAwareness(2) stattdessen scheint um den trick zu tun.
Vielen Dank das funktioniert perfekt auf 4K-Bildschirm win10
InformationsquelleAutor spacether
Sowie für die Vollständigkeit, Mac OS X
wird Ihnen eine Liste von Tupeln, die alle Bildschirm-Größen (wenn mehrere Monitore vorhanden)
InformationsquelleAutor cobbal
Wenn Sie die
Qt
toolkit speziellPySide
, können Sie Folgendes tun:InformationsquelleAutor MadeOfAir
Linux zu verwenden, ist der einfachste Weg zum ausführen von bash-Befehl
machen und analysieren Sie Ihre Ausgabe mit regexp.
Auch Sie können es tun, durch PyGame: http://www.daniweb.com/forums/thread54881.html
stackoverflow.com/a/19954583/344347
InformationsquelleAutor Pavel Strakhov
Hier ist eine schnelle kleine Python-Programm, das anzeigen der Informationen über Ihre multi-monitor-setup:
Hier ist ein Beispiel der Ausgabe:
gtk.Window()
Holen Sie sich diegdk_default_root_window
? Ist, dass, wie Sie sicher sind.get_screen
enthält alle Monitore?Ich Frage, weil in meinem code, ich versuche zu replizieren deinen code, ich mache es in jsctypes, und es sagt mir 0-Monitore: gist.github.com/yajd/55441c9c3d0711ee4a38#file-gistfile1-txt-L3
Es ist eine Weile her, seit ich schrieb, dass der code aber, wenn ich mich Recht erinnere, was
gtk.Window()
tut, ist erstellen Sie ein neues Fenster (siehe hier). Das Fenster ist nur ein Weg, umget_screen
um die monitor-Informationen. Es gibt den Bildschirm, der das Fenster auf ist (oder wäre, wenn es überhaupt angezeigt wird). Ich denke, es hängt von der X-Konfiguration, ob das "Bildschirm" enthält alle "Monitore". Es funktioniert auf meinem system mit Twinview.Danke @starfry! Ich benötigte eine Kreuz-Lösung, die bekommt alle Monitore und deren Abmessungen unabhängig von den Bildschirmen. Haben Sie hatte keine chacne etwas zu entwickeln? 🙂
InformationsquelleAutor starfry
Ich bin mit einem get_screen_resolution Methode in einem meiner Projekte, wie das unten, das ist im Grunde eine import-Kette. Sie können ändern Sie diese nach Ihren Bedürfnissen, indem die Teile, die nicht benötigt werden und mehr bewegen dürfte ports nach oben in der Kette.
InformationsquelleAutor Martin Hansen
XWindows-version:
InformationsquelleAutor cpoakes
Versuchen Sie den folgenden code:
InformationsquelleAutor Taghouti Tarek
In den Fall, Sie haben PyQt4 installiert ist, versuchen Sie den folgenden code:
Für PyQt5 die folgenden arbeiten:
InformationsquelleAutor Harsh Kumar Narula
Alte Frage, aber dieses fehlt.
Ich bin neu in python, also bitte sagen Sie mir, ob dies eine "schlechte" Lösung.
Diese Lösung unterstützt wird für Windows und MacOS nur, und es funktioniert nur für den Hauptbildschirm - aber das os ist nicht in der Frage genannten.
Messen Sie die Größe, indem Sie einen screenshot. Als Auflösung sollten Sie nicht ändern, dies muss nur einmal gemacht werden.
Es gibt elegantere Lösungen, wenn Sie ein gui-toolkit wie GTK, wx, ... installiert.
sehen Kissen
InformationsquelleAutor lumos0815
Unter Linux
Statt regexp nehmen Sie die erste Zeile, und nehmen Sie Sie heraus, die aktuelle Auflösung Werte.
Aktuelle Auflösung der Anzeige :0
Dies geschah auf xrandr 1.3.5, ich weiß nicht, ob die Ausgabe ist anders in anderen Versionen, aber dies sollte einfach herauszufinden.
InformationsquelleAutor Alex R
Um bits pro pixel:
Parameter in gdi32:
InformationsquelleAutor user3757097
Andere version mit
xrandr
:InformationsquelleAutor sirex
Mit pygame:
[1]
Jedoch, wenn Sie versuchen, Ihre Fenster, um der Größe des Bildschirms, können Sie nur wollen, zu tun:
Ihre Anzeige auf Vollbild-Modus. [2]
InformationsquelleAutor tburrows13
Versuchen pyautogui:
Toll, es funktioniert auf Windows 🙂
InformationsquelleAutor Tyler
Könnten Sie PyMouse. Um den Bildschirm Größe verwenden Sie einfach die
screen_size()
Attribut:a
zurückkehren wird, ein Tupel,(X, Y)
, woX
ist die horizontale position und dieY
ist die vertikale position.Link-Funktion in der Dokumentation.
InformationsquelleAutor Simon
Unter Linux, die wir verwenden können, subprocess-Modul
InformationsquelleAutor kamran kausar
Es ist ein wenig lästig für den retina-Bildschirm, ich nutze tkinter, um die gefälschte Größe, pilllow greifen, um wirkliche Größe :
InformationsquelleAutor NicolasLi
Wenn Sie arbeiten, auf Windows OS, die Sie verwenden können, OS-Modul, um es zu bekommen:
Wird es wieder ein Tupel (Y,X) wo Y ist die horizontale Größe und X ist die vertikale Größe. Dieser code funktioniert auf Python 2 und Python 3
InformationsquelleAutor Diroallu