Support func ops on field data, extend anchor logics
parent
c71a3e0fc5
commit
c75dacb239
|
@ -18,13 +18,13 @@
|
||||||
Non-shitty labels that don't re-invent the wheel.
|
Non-shitty labels that don't re-invent the wheel.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
from inspect import isfunction
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
from PyQt5 import QtGui
|
from PyQt5 import QtGui
|
||||||
from PyQt5.QtCore import QPointF, QRectF
|
from PyQt5.QtCore import QPointF, QRectF
|
||||||
|
|
||||||
|
|
||||||
from ._style import (
|
from ._style import (
|
||||||
DpiAwareFont,
|
DpiAwareFont,
|
||||||
hcolor,
|
hcolor,
|
||||||
|
@ -37,18 +37,16 @@ def vbr_left(label) -> Callable[..., float]:
|
||||||
leftmost point of the containing view box.
|
leftmost point of the containing view box.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
return label.vbr().left
|
||||||
def viewbox_left():
|
|
||||||
return label.vbr().left()
|
|
||||||
|
|
||||||
return viewbox_left
|
|
||||||
|
|
||||||
|
|
||||||
def right_axis(
|
def right_axis(
|
||||||
|
|
||||||
chart: 'ChartPlotWidget', # noqa
|
chart: 'ChartPlotWidget', # noqa
|
||||||
label: 'Label', # noqa
|
label: 'Label', # noqa
|
||||||
|
side: str = 'left',
|
||||||
offset: float = 10,
|
offset: float = 10,
|
||||||
|
avoid_book: bool = True,
|
||||||
width: float = None,
|
width: float = None,
|
||||||
|
|
||||||
) -> Callable[..., float]:
|
) -> Callable[..., float]:
|
||||||
|
@ -59,17 +57,35 @@ def right_axis(
|
||||||
"""
|
"""
|
||||||
ryaxis = chart.getAxis('right')
|
ryaxis = chart.getAxis('right')
|
||||||
|
|
||||||
def right_axis_offset_by_w() -> float:
|
if side == 'left':
|
||||||
|
|
||||||
# l1 spread graphics x-size
|
if avoid_book:
|
||||||
l1_len = chart._max_l1_line_len
|
def right_axis_offset_by_w() -> float:
|
||||||
|
|
||||||
# sum of all distances "from" the y-axis
|
# l1 spread graphics x-size
|
||||||
right_offset = l1_len + label.w + offset
|
l1_len = chart._max_l1_line_len
|
||||||
|
|
||||||
return ryaxis.pos().x() - right_offset
|
# sum of all distances "from" the y-axis
|
||||||
|
right_offset = l1_len + label.w + offset
|
||||||
|
|
||||||
return right_axis_offset_by_w
|
return ryaxis.pos().x() - right_offset
|
||||||
|
|
||||||
|
else:
|
||||||
|
def right_axis_offset_by_w() -> float:
|
||||||
|
|
||||||
|
return ryaxis.pos().x() - (label.w + offset)
|
||||||
|
|
||||||
|
return right_axis_offset_by_w
|
||||||
|
|
||||||
|
elif 'right':
|
||||||
|
|
||||||
|
# axis_offset = ryaxis.style['tickTextOffset'][0]
|
||||||
|
|
||||||
|
def on_axis() -> float:
|
||||||
|
|
||||||
|
return ryaxis.pos().x() # + axis_offset - 2
|
||||||
|
|
||||||
|
return on_axis
|
||||||
|
|
||||||
|
|
||||||
class Label:
|
class Label:
|
||||||
|
@ -200,7 +216,23 @@ class Label:
|
||||||
self._fmt_str = fmt_str
|
self._fmt_str = fmt_str
|
||||||
|
|
||||||
def format(self, **fields: dict) -> str:
|
def format(self, **fields: dict) -> str:
|
||||||
text = self._fmt_str.format(**fields)
|
|
||||||
|
out = {}
|
||||||
|
|
||||||
|
# this is hacky support for single depth
|
||||||
|
# calcs of field data from field data
|
||||||
|
# ex. to calculate a $value = price * size
|
||||||
|
for k, v in fields.items():
|
||||||
|
if isfunction(v):
|
||||||
|
out[k] = v(fields)
|
||||||
|
else:
|
||||||
|
out[k] = v
|
||||||
|
|
||||||
|
text = self._fmt_str.format(**out)
|
||||||
|
|
||||||
|
# for large numbers with a thousands place
|
||||||
|
text = text.replace(',', ' ')
|
||||||
|
|
||||||
self.txt.setPlainText(text)
|
self.txt.setPlainText(text)
|
||||||
|
|
||||||
def render(self) -> None:
|
def render(self) -> None:
|
||||||
|
|
Loading…
Reference in New Issue