¿Cómo mostrar un pyqtgraph.TextItem sobre todos los demás elementos en una escena?
Estoy intentando hacer que una etiqueta InfiniteLine
aparezca sobre todos los demás elementos en una escena de pyqtgraph. Estoy configurando el zValue
de la etiqueta en 1 y todos los demás en 0. A pesar de esto, la etiqueta todavía aparece debajo de otros elementos en la escena. Aquí hay un ejemplo mínimo donde la etiqueta para el InfiniteLine
aparece debajo del LinearRegionItem
a pesar de tener un zValue
más alto.
from pyqtgraph import GraphicsLayoutWidget, PlotItem, InfiniteLine, LinearRegionItem, mkQApp
<h1>app</h1>
app = mkQApp()
<h1>items</h1>
line = InfiniteLine(pos=5, label="posición: {valor}", movable=True)
region = LinearRegionItem(values=(6, 10), movable=True, pen="red", brush="red")
<h1>plot</h1>
plot = PlotItem()
plot.setXRange(0, 20)
plot.addItem(line)
plot.addItem(region)
<h1>widget</h1>
widget = GraphicsLayoutWidget()
widget.addItem(plot, 0, 0)
widget.show()
<h1>set zvalues</h1>
line.setZValue(0)
region.setZValue(0)
line.label.setZValue(1)
<h1>run</h1>
app.exec()
davy.ai
Parece que establecer solo el
zValue
de la etiquetaInfiniteLine
no es suficiente para asegurar que aparezca sobre todos los demás elementos en la escena. Una posible solución es establecer elzValue
delPlotItem
en sí mismo a un valor negativo, lo cual asegurará que cada elemento agregado a la escena aparezca por encima de él. Aquí está el código modificado:Con esta modificación, ahora la etiqueta para
InfiniteLine
aparece sobreLinearRegionItem
.