I am trying to write a plugin that will show an image based on its footprint in the vector layer. Currently, I have a problem with QgsMapCanvas. Layer in QgsMapCanvas disappear when I pan/zoom canvas. Here's my code:
myPlugin.py
def startOblique(self):
self.dlgSec.canvas_dlg.show()
self.dlgSec.canvas_dlg.enableAntiAliasing(True)
newRaster = QgsRasterLayer(r'D:\basic\FRONT\B002_0891.tif','Raster1')
print(newRaster)
print(self.dlgSec.canvas_dlg)
self.dlgSec.canvas_dlg.setLayers([newRaster])
self.dlgSec.canvas_dlg.setExtent(newRaster.extent())
self.dlgSec.canvas_dlg.refresh()
self.dlgSec.canvas_dlg.waitWhileRendering()
def run(self):
if self.first_start == True:
self.first_start = False
self.dlg = test1Dialog()
self.dlgSec = test2Dialog()
project = QgsProject.instance()
# show the dialogs
self.dlg.show()
self.dlgSec.show()
self.dlg.oblique_starter.clicked.connect(self.startOblique)
When I click oblique_starter
button I get this:
So, everything is fine by now. Raster is on the canvas.
When I try to pan/zoom on the canvas raster disappears so I get this:
Extra info: When I execute simple code to show canvas and raster layer inside python console on QGIS I can pan and zoom layer and it doesn't disappear:
canvas = QgsMapCanvas()
canvas.enableAntiAliasing(True)
newRaster = QgsRasterLayer(r'D:\basic\FRONT\B002_0891.tif','Raster1')
canvas.setExtent(newRaster.extent())
canvas.setLayers([newRaster])
canvas.resize(QSize(1366, 1064))
canvas.show()
What can I do to prevent the layer from disappearing from the canvas in my plugin?
def refresh_canvas(self): self.dlgSec.canvas_dlg.refresh()
and signal:self.dlgSec.canvas.extentsChanged.connect(self.refresh_canvas)