Daugiau

„PyGIS“ pašalina „QgsVertexMarker“ iš įvykio vietos

„PyGIS“ pašalina „QgsVertexMarker“ iš įvykio vietos


Rašau papildinį, kuris apima sąveiką su žemėlapiu. Todėl naudoju a„QgsMapTool“. Vartotojas gali pažymėti tašką žemėlapyje. Kai naudotojas spustelėja, žemėlapyje „Canvas via“ nupieštas raudonas X„QgsVertexMarker“.

vertex_marker = QgsVertexMarker (self.canvas) vertex_marker.setCenter (QgsPoint (map_coordinates ['x'], map_coordinates ['y'])) vertex_marker.setColor (QColor (255, 0, 0)) vertex_marker.setIconSize (7) viršūnė setIconType (QgsVertexMarker.ICON_X) # ICON_BOX, ICON_CROSS, ICON_X vertex_marker.setPenWidth (2)

Tai veikia gerai. Ir raudoni X rodomi žemėlapyje. Bet aš negaliu ištrinti „VertexMarker“. Bandau ištrinti „VertexMarker“ iš scenos. Aš naudojau kažką tokio:

vertex_items = [i for i in iface.mapCanvas (). scene (). items () if issubclass (type (i), qgis.gui.QgsVertexMarker)] for ver in vertex_items: jei ver in iface.mapCanvas () scena () .items (): iface.mapCanvas (). scene (). items (). pašalinti (ver) iface.mapCanvas (). refresh ()

Taip gaunu naudotą „VertexMarker“, matomą scenoje. Tačiau pašalinimo funkcija kažkaip nepašalina žymeklio iš scenos.

Ar yra dar viena galimybė pašalinti„QgsVertexMarker“iš įvykio vietos?


Radau sprendimą. Vietoj

iface.mapCanvas (). scene (). items (). pašalinti (ver)

elementas turi būti ištrintas tiesiai iš įvykio vietos:

vertex_items = [i for i in iface.mapCanvas (). scene (). items () if issubclass (type (i), qgis.gui.QgsVertexMarker)] for ver vertex_items: jei ver in iface.mapCanvas (). scena () .items (): iface.mapCanvas (). scene (). removeItem (ver)

Atskiroje programoje (be sąsajos) [Wien 2.8.1] naudokite:

canvas.scene (). removeItem (vertexMarker)

Rasta „PyQgis Developer Cookbook“/ Guminės juostos ir viršūnių žymekliai


Dirbu su paprastu papildiniu, kuris leidžia priartinti konkrečias koordinates ir nubrėžti ženklą su iššokančiu komentaru (paveikslėlis žemiau):

1 -as: Turite paskelbti visuotinį sąrašą, kuriame bus scenoje nupiešti žymekliai:

Žymekliai = []

2 -as: Funkcija, skirta ištrinti žymeklio tašką:

def Delete_Marker (drobė): drobė = iface.mapCanvas () globalūs žymekliai žymėjimui žymekliuose: canvas.scene (). removeItem (mark) canvas.refresh ()

3: Nubrėžkite naują žymeklį prie scenos:

def Draw_Marker (drobė): drobė = iface.mapCanvas () # išvalykite drobę iš ankstesnio pridėto žymeklio Delete_Marker (drobė) m = QgsVertexMarker (drobė) m.setCenter (pt) m.setColor (QColor (255, 0, 0)) m.setIconSize (10) m.setIconType (QgsVertexMarker.ICON_X) m.setPenWidth (3) # Pridėkite nupieštą žymeklį prie žymeklių sąrašo Markers.append (m)