¿Cuál es la forma más sencilla de obtener la resolución del monitor (preferiblemente en una tupla)?
python
screen
resolution
rectángulo
fuente
fuente
Tkinter
módulo, puede hacerlo de esta manera . Es parte de la biblioteca estándar de Python y funciona en la mayoría de las plataformas Unix y Windows.Respuestas:
En Windows:
Si está trabajando con una pantalla de alta resolución, asegúrese de que su intérprete de Python sea HIGHDPIAWARE.
Basado en esta publicación.
fuente
highdpiaware
? Sería útil incluir esto en la respuesta.En Windows, también puede usar ctypes con
GetSystemMetrics()
:para que no necesite instalar el paquete pywin32; no necesita nada que no venga con Python.
Para configuraciones de varios monitores, puede recuperar el ancho y alto combinados del monitor virtual:
fuente
GetSystemMetrics(78)
yGetSystemMetrics(79)
vuelve?Creé un módulo PyPI por este motivo:
El código:
Resultado:
Es compatible con entornos de varios monitores . Su objetivo es ser multiplataforma; por ahora es compatible con Cygwin y X11, pero las solicitudes de extracción son totalmente bienvenidas.
fuente
pip install cython pyobjus
embargoSi está utilizando wxWindows, simplemente puede hacer:
fuente
app = wx.App(False)
contrario, obtendrá el "primero se debe crear el objeto wx.App". error. 26 votos y nadie lo comprobó? ¿Funciona en Windows sin asignar una instancia de wx a una variable?Tomado directamente de una respuesta a esta publicación: ¿Cómo obtener el tamaño de la pantalla en Tkinter?
fuente
En Windows 8.1 no obtengo la resolución correcta de ctypes o tk. Otras personas están teniendo el mismo problema con los tipos de ctypes: getsystemmetrics devuelve un tamaño de pantalla incorrecto Para obtener la resolución completa correcta de un monitor de alto DPI en Windows 8.1, se debe llamar a SetProcessDPIAware y usar el siguiente código:
Detalles completos a continuación:
Descubrí que esto se debe a que Windows informa una resolución escalada. Parece que Python es, de forma predeterminada, una aplicación "consciente de dpi del sistema". Los tipos de aplicaciones compatibles con DPI se enumeran aquí: http://msdn.microsoft.com/en-us/library/windows/desktop/dn469266%28v=vs.85%29.aspx#dpi_and_the_desktop_scaling_factor
Básicamente, en lugar de mostrar el contenido con la resolución completa del monitor, lo que haría que las fuentes fueran pequeñas, el contenido se escala hasta que las fuentes sean lo suficientemente grandes.
En mi monitor obtengo:
Resolución física: 2560 x 1440 (220 DPI)
Resolución de Python reportada: 1555 x 875 (158 DPI)
Según este sitio de Windows: http://msdn.microsoft.com/en-us/library/aa770067%28v=vs.85%29.aspx La fórmula para la resolución efectiva del sistema informado es: (report_px * current_dpi) / (96 dpi ) = físico_px
Puedo obtener la resolución de pantalla completa correcta y el DPI actual con el siguiente código. Tenga en cuenta que llamo a SetProcessDPIAware () para permitir que el programa vea la resolución real.
Que regresó:
Estoy ejecutando Windows 8.1 con un monitor con capacidad de 220 DPI. La escala de mi pantalla establece mi DPI actual en 158.
Usaré el 158 para asegurarme de que mis parcelas de matplotlib tengan el tamaño correcto con: from pylab import rcParams rcParams ['figure.dpi'] = curr_dpi
fuente
Tkinter
está usando píxeles correctos, pero no es consciente de la escala de ppp, por lo que informa tamaños de mm incorrectos.ctypes.windll.shcore.SetProcessDpiAwareness(2)
devuelve errorOSError: [WinError 126] The specified module could not be found
.Y para completar, Mac OS X
le dará una lista de tuplas que contienen todos los tamaños de pantalla (si hay varios monitores presentes)
fuente
Si está utilizando
Qt
específicamente el kit de herramientasPySide
, puede hacer lo siguiente:fuente
Usando Linux, la forma más sencilla es ejecutar el comando bash
y analizar su salida usando regexp.
También puedes hacerlo a través de PyGame: http://www.daniweb.com/forums/thread54881.html
fuente
Aquí hay un pequeño programa rápido de Python que mostrará la información sobre su configuración de múltiples monitores:
Aquí hay un ejemplo de su salida:
fuente
gtk.Window()
Obtiene elgdk_default_root_window
? ¿Es así como está seguro de que.get_screen
contiene todos los monitores?gtk.Window()
hace es crear una nueva ventana (ver aquí ). La ventana es solo una formaget_screen
de obtener la información del monitor. Devuelve la pantalla en la que está la ventana (o lo estaría, si alguna vez se mostrara). Supongo que depende de la configuración X si esa "pantalla" contiene todos los "monitores". Lo hace en mi sistema con Twinview.Estoy usando un método get_screen_resolution en uno de mis proyectos como el siguiente, que es básicamente una cadena de importación. Puede modificar esto de acuerdo con sus necesidades eliminando las partes que no son necesarias y moviendo los puertos más probables hacia arriba en la cadena.
fuente
Pregunta antigua, pero falta esta. Soy nuevo en Python, así que dígame si esta es una solución "mala". Esta solución es compatible solo con Windows y MacOS y funciona solo para la pantalla principal, pero el sistema operativo no se menciona en la pregunta.
Mide el tamaño tomando una captura de pantalla. Como el tamaño de la pantalla no debería cambiar, esto solo debe hacerse una vez. Hay soluciones más elegantes si tiene un kit de herramientas de interfaz gráfica de usuario como GTK, wx, ... instalado.
ver almohada
fuente
Versión de XWindows:
fuente
Ampliando la respuesta de @ user2366975 , para obtener el tamaño de pantalla actual en una configuración de múltiples pantallas usando Tkinter (código en Python 2/3):
(Debería funcionar multiplataforma, probado solo en Linux)
fuente
Prueba el siguiente código:
fuente
En caso de que tenga PyQt4 instalado, pruebe el siguiente código:
Para PyQt5, funcionará lo siguiente:
fuente
Una forma multiplataforma y fácil de hacer esto es usando TKinter que viene con casi todas las versiones de Python para que no tenga que instalar nada:
fuente
Usando Linux En lugar de regexp, tome la primera línea y saque los valores de resolución actuales.
Resolución actual de la pantalla: 0
Esto se hizo en xrandr 1.3.5, no sé si el resultado es diferente en otras versiones, pero esto debería facilitar su comprensión.
fuente
Para obtener bits por píxel:
parámetros en gdi32:
fuente
Prueba pyautogui:
fuente
Otra versión usando
xrandr
:fuente
Usando pygame :
[1]
Sin embargo, si está tratando de configurar su ventana al tamaño de la pantalla, es posible que desee hacer lo siguiente:
para configurar su pantalla en modo de pantalla completa. [2]
fuente
Podrías usar PyMouse . Para obtener el tamaño de la pantalla, simplemente use el
screen_size()
atributo:a
devolverá una tupla,(X, Y)
dondeX
es la posición horizontal yY
es la posición vertical.Enlace a la función en la documentación.
fuente
Si está trabajando en el sistema operativo Windows, puede usar el módulo del sistema operativo para obtenerlo:
Devolverá una tupla (Y, X) donde Y es el tamaño vertical y X es el tamaño horizontal. Este código funciona en Python 2 y Python 3
fuente
En Linux podemos usar el módulo de subproceso
fuente
Es un poco problemático para la pantalla de retina, uso tkinter para obtener el tamaño falso, uso pilllow grab para obtener el tamaño real:
fuente
Para versiones posteriores de PyGtk:
fuente
Para Linux, puede usar esto:
fuente
Script de utilidad usando
pynput
biblioteca. Publicando aquí para ref .:fuente