Cómo determinar el tamaño de la pantalla en matplotlib

Estoy buscando una forma general de obtener el tamaño de la pantalla en píxeles mediante matplotlib con cualquier backend interactivo (por ejemplo, TkAgg, Qt4Agg o macosx).

Estoy tratando de escribir una función que pueda abrir una ventana en un conjunto de ubicaciones estándar en la pantalla como, por ejemplo, la mitad derecha de la pantalla o la esquina superior derecha.

Escribí una solución de trabajo aquí , copiada a continuación, pero requiere una para usar full_screen_toggle () (como se sugiere aquí ) para crear una ventana de pantalla completa para medir su tamaño.

Estoy buscando una manera de obtener el tamaño de la pantalla sin crear una ventana de pantalla completa y luego cambiar su tamaño.

import matplotlib.pyplot as plt def move_figure(position="top-right"): ''' Move and resize a window to a set of standard positions on the screen. Possible positions are: top, bottom, left, right, top-left, top-right, bottom-left, bottom-right ''' mgr = plt.get_current_fig_manager() mgr.full_screen_toggle() # primitive but works to get screen size py = mgr.canvas.height() px = mgr.canvas.width() d = 10 # width of the window border in pixels if position == "top": # x-top-left-corner, y-top-left-corner, x-width, y-width (in pixels) mgr.window.setGeometry(d, 4*d, px - 2*d, py/2 - 4*d) elif position == "bottom": mgr.window.setGeometry(d, py/2 + 5*d, px - 2*d, py/2 - 4*d) elif position == "left": mgr.window.setGeometry(d, 4*d, px/2 - 2*d, py - 4*d) elif position == "right": mgr.window.setGeometry(px/2 + d, 4*d, px/2 - 2*d, py - 4*d) elif position == "top-left": mgr.window.setGeometry(d, 4*d, px/2 - 2*d, py/2 - 4*d) elif position == "top-right": mgr.window.setGeometry(px/2 + d, 4*d, px/2 - 2*d, py/2 - 4*d) elif position == "bottom-left": mgr.window.setGeometry(d, py/2 + 5*d, px/2 - 2*d, py/2 - 4*d) elif position == "bottom-right": mgr.window.setGeometry(px/2 + d, py/2 + 5*d, px/2 - 2*d, py/2 - 4*d) if __name__ == '__main__': # Usage example for move_figure() plt.figure(1) plt.plot([0, 1]) move_figure("top-right") plt.figure(2) plt.plot([0, 3]) move_figure("bottom-right") 

Esto funciona para OS X:

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

El documento de Apple en la clase NSScreen .

Esto funciona para TKagg

 import matplotlib.pyplot as plt window = plt.get_current_fig_manager().window screen_x, screen_y = window.wm_maxsize() #or screen_y = window.winfo_screenheight() screen_x = window.winfo_screenwidth() 

Lo único extraño que he visto es que, a veces, el tamaño y está desactivado en aproximadamente 22 px.