Dodaj pasek skali do płótna za pomocą PyQGIS

Oct 26 2020

Czy można umieścić pasek skali dekoratora na kanwie mapy w samodzielnej aplikacji PyQGIS? Istnieje możliwość pobrania paska skali w wersji QGIS Desktop wgView -> Decorations -> Scale Bar

Widziałem ten post: Uzyskaj dostęp / zmodyfikuj dekorację autorską QGIS za pośrednictwem Pythona, ale jest to tylko dla dekoratora praw autorskich. Zastanawiałem się, czy jest coś podobnego do paska skali.

Odpowiedzi

1 DrorBogin Oct 26 2020 at 17:23

Korzystając z tej samej metody, co w dodanej odpowiedzi,
po prostu dostosowałem się do PyQt5 i domyśliłem się na przykładzie, że to zadziała.
Wygląda na to, że działa to tylko w projektach, które zostały już zapisane (dla mnie spowodowało to awarię projektu bez tytułu, w którym byłem), ale działa całkiem dobrze.

from PyQt5.QtCore import QSettings

QgsProject.instance().writeEntry( "ScaleBar", "/Color" , "#ff9e00" ); #Can also be rgba 255,158,0,255
QgsProject.instance().writeEntry( "ScaleBar", "/MarginH" , 0 );
QgsProject.instance().writeEntry( "ScaleBar", "/MarginV" , 0 );
QgsProject.instance().writeEntry( "ScaleBar", "/MarginUnit" , "MM" );
QgsProject.instance().writeEntry( "ScaleBar", "/Style" , 3 ); # 0 Tick Down, 1 Tick Up, 2 Bar, 3 Box, 
QgsProject.instance().writeEntry( "ScaleBar", "/Placement" , 0 ); # Bottom Left
QgsProject.instance().writeEntry( "ScaleBar", "/PreferredSize" , 30 );
QgsProject.instance().writeEntry( "ScaleBar", "/Enabled" , True );

#Save Project
QgsProject.instance().write()

extent = iface.mapCanvas().extent()

#Reload project
def set_extent():
    iface.mapCanvas().setExtent(extent)
    iface.projectRead.disconnect(set_extent)
    print('Loaded using new copyright label')

filename = QgsProject.instance().fileName()
iface.projectRead.connect(set_extent)
iface.addProject(filename)

Jeśli chcesz uzyskać inne opcje, możesz zapisać swój projekt jako Qgs i znaleźć wszystkie opcje w ScaleBarwęźle.
Właściwości czcionki są definiowane w TextFormatwęźle wewnętrznym .