Saltar al contenido

¿Cómo se establece la posición absoluta de las ventanas de figuras con matplotlib?

Esta es la solución más correcta que te podemos compartir, sin embargo mírala pausadamente y valora si se adapta a tu proyecto.

Solución:

FINALMENTE encontré la solución para el backend de QT:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
mngr = plt.get_current_fig_manager()
# to put it into the upper left corner for example:
mngr.window.setGeometry(50,100,640, 545)

Si uno no conoce el ancho xey uno puede leerlos primero, así:

# get the QTCore PyRect object
geom = mngr.window.geometry()
x,y,dx,dy = geom.getRect()

y luego establezca la nueva posición con el mismo tamaño:

mngr.window.setGeometry(newX, newY, dx, dy)

Buscaba esto con bastante frecuencia y finalmente invertí los 30 minutos para averiguarlo. Espero que ayude a alguien.

Con la ayuda de las respuestas hasta ahora y algunos retoques por mi cuenta, aquí hay una solución que verifica el backend actual y usa la sintaxis correcta.

import matplotlib
import matplotlib.pyplot as plt

def move_figure(f, x, y):
    """Move figure's upper left corner to pixel (x, y)"""
    backend = matplotlib.get_backend()
    if backend == 'TkAgg':
        f.canvas.manager.window.wm_geometry("+%d+%d" % (x, y))
    elif backend == 'WXAgg':
        f.canvas.manager.window.SetPosition((x, y))
    else:
        # This works for QT and GTK
        # You can also use window.setGeometry
        f.canvas.manager.window.move(x, y)

f, ax = plt.subplots()
move_figure(f, 500, 500)
plt.show()

No es que conozca una forma agnóstica de backend para hacer esto, pero definitivamente es posible hacerlo para algunos backends comunes, por ejemplo, WX, tkagg, etc.

import matplotlib
matplotlib.use("wx")
from pylab import *
figure(1)
plot([1,2,3,4,5])
thismanager = get_current_fig_manager()
thismanager.window.SetPosition((500, 0))
show()

por @tim en la sección de comentarios a continuación, es posible que desee cambiar a

thismanager.window.wm_geometry("+500+0")

en lugar de. Para TkAgg, solo cámbialo a

thismanager.window.wm_geometry("+500+0")

Entonces creo que puedes agotar todos los backends que son capaces de hacer esto, si imponer uno en particular no es una opción.

Si para ti ha resultado provechoso nuestro artículo, sería de mucha ayuda si lo compartieras con otros entusiastas de la programación y nos ayudes a extender nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *